numpy 如何检查数组的两个切片是否相交?

guz6ccqo  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(112)

我有一个2d数组arr = np.zeros((9,9), dtype=object),稍后我将有两个形状为(5,1)和(1,5)的切片,它们总是一维的。

a = arr[1:2, 3:8] # Red

b = arr[0:5, 4:5] # Blue

如何在代码中从数学上判断两个切片是否垂直相交于一点?

以前的尝试:我尝试使用np.may_share_memory(a,b),但它返回True,即使它们不相交。

n1bvdmb6

n1bvdmb61#

假设每个范围的start < endstep == 1(默认值),只有两种方法可以使一对范围不在给定轴上相交。
对于每个轴,比较两个列表在该轴上的范围,检查重叠。(例如,检查1:20:5以及3:84:5。)如果所有轴都显示重叠,则形状重叠。

def does_overlap(a_start, a_end, b_start, b_end):
    if a_start >= b_end: return False
    if b_start >= a_end: return False
    return True

results = does_overlap(1, 2, 0, 5) and does_overlap(3, 8, 4, 5) # True

根据评论,看起来你的问题实际上可能是“在创建切片后如何获得切片的边界?”“Numpy似乎没有提供一种方法来做到这一点。

bogh5gae

bogh5gae2#

你试过intersect1d()功能吗?
它将给予两个一维数组之间的公共元素。如果输入数组不是一维的,则会被展平。

相关问题