Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy查找范围元组之间的交点_Python_Pandas_Numpy - Fatal编程技术网

Python 使用numpy查找范围元组之间的交点

Python 使用numpy查找范围元组之间的交点,python,pandas,numpy,Python,Pandas,Numpy,我有一个这样的范围列表: [ (1,3), (13,13), (14,16), (15,19), ] 我需要在其中找到相交的范围。 在这种情况下,它将是第三行和第四行。在numpy中执行此操作的有效方法是什么?这将返回一列,告诉您一行是否与其下一个间隔重叠: a = np.array([(1,3),(13,13),(14,16),(15,19)]) a.sort() intervals = pd.DataFrame(a,columns=['start','end']) print((inter

我有一个这样的范围列表:

[
(1,3),
(13,13),
(14,16),
(15,19),
]
我需要在其中找到相交的范围。
在这种情况下,它将是第三行和第四行。在numpy中执行此操作的有效方法是什么?

这将返回一列,告诉您一行是否与其下一个间隔重叠:

a = np.array([(1,3),(13,13),(14,16),(15,19)])
a.sort()
intervals = pd.DataFrame(a,columns=['start','end'])
print((intervals.end-intervals.start.shift(-1))>0)
输出:

0    False
1    False
2     True
3    False
查找重叠间隔的索引:

idx = np.array(np.where((intervals.end-intervals.start.shift(-1))>0))
print(np.hstack((idx,idx+1)))
#[[2 3]]

你可以用numpy做类似的事情。您必须编写shift函数或使用scipy进行shift或使用numpy.roll。

这也可以在没有模块的情况下完成,您可以使用
set.intersection()
方法:

l = [(1,3),
     (13,13),
     (14,16),
     (15,19)]

print([(l[i-1],t) for i,t in enumerate(l) if set(range(t[0],t[1])).intersection(range(l[i-1][0],l[i-1][1]))])
输出:

[((14, 16), (15, 19))]

一定要和numpy在一起吗?还是熊猫也很好?熊猫很好。