给定一组范围如下
dates = [[1200, 1300], [1100, 1300], [1200, 1300], [1200, 1400], [1100, 1400]]我想以一种有效的方式提取所有可能的间隔,然后计算每个间隔中可用的范围数。
例如,可能间隔的结果矩阵如下:
[1100, 1200] [1200, 1300] [1300, 1400]
0 0 1 0
1 1 1 0
2 0 1 0
3 0 1 1
4 1 1 1然后,按列和给出每个间隔中的范围数。
[1100, 1200] 2
[1200, 1300] 5
[1300, 1400] 2发布于 2016-05-10 12:43:02
下面是一种为您提供想要的numpy矩阵m的方法,其中包含布尔值:
def getOverlap(a, b):
return max(0, min(a[1], b[1]) - max(a[0], b[0]))
nodes = sorted(np.unique(np.array(dates).flatten()))
intervals = zip(nodes[:-1], nodes[1:])
# [(1100, 1200), (1200, 1300), (1300, 1400)]
m = np.array([[bool(getOverlap(i, d)) for d in dates] for i in intervals])
m.sum(axis=1)
# array([2, 5, 2])请注意,如果您希望“矩阵”成为pandas DataFrame,只需:
pd.DataFrame(m.transpose().astype(int), columns=intervals)
(1100, 1200) (1200, 1300) (1300, 1400)
0 0 1 0
1 1 1 0
2 0 1 0
3 0 1 1
4 1 1 1发布于 2016-05-10 12:31:29
我在这里遵循了这个方法。比这个更紧凑。这是新的一天!
c=[[1200, 1300], [1100, 1300], [1200, 1300], [1200, 1400], [1100, 1400]]
print "string values", c
uniquea={}
new=[]
for i in c:
j=str(i)
if j in new:
uniquea[j]+=1
else:
uniquea[j]=1
new.append(j)打印统一,新的
https://stackoverflow.com/questions/37138023
复制相似问题