我有一个排序的numpy 2d数组x
,每行有两个间隔的开始和结束位置的组合:
[[x_start_1, x_end_1, y_start_1, y_end_1],
[x_start_2, x_end_2, y_start_2, y_end_2],
...
[x_start_n, x_end_n, y_start_n, y_end_n]]
该数组按x_start_n
和x_end_n
之间的长度降序排列。来自同一行的x
和y
间隔的长度始终相同。
问题是:找到给定行中的x
和y
间隔是否为任何x
和{{1 }}与以上任何行之间的间隔?
示例:
y
我能想到并实现的唯一解决方案是执行double for循环并扩展有效行的列表,并在下一次迭代中使用它进行比较。
为便于可视化:
array([[35, 39, 1, 5],
[20, 24, 4, 8],
[32, 36, 10, 14],
[35, 38, 1, 4], --> TRUE
[35, 38, 21, 24],
[19, 22, 2, 5],
[36, 39, 2, 5], --> TRUE
[20, 23, 4, 7], --> TRUE
[ ... ]])
感谢您的帮助! <3
答案 0 :(得分:0)
这是利用broadcasting
-
m1 = x[:,0,None]<=x[:,0]
m2 = x[:,1,None]>=x[:,1]
m3 = x[:,2,None]<=x[:,2]
m4 = x[:,3,None]>=x[:,3]
m12 = m1 & m2
m34 = m3 & m4
out = np.triu((m12 & m34),1).any(0)
样本输入,输出-
In [2]: x
Out[2]:
array([[35, 39, 1, 5],
[20, 24, 4, 8],
[32, 36, 10, 14],
[35, 38, 1, 4],
[35, 38, 21, 24],
[19, 22, 2, 5],
[36, 39, 2, 5],
[20, 23, 4, 7]])
In [3]: out
Out[3]: array([False, False, False, True, False, False, True, True])