我有一个2d数组arr = np.zeros((9,9), dtype=object),稍后我将有两个形状为(5,1)和(1,5)的切片,它们总是一维的。
arr = np.zeros((9,9), dtype=object)
a = arr[1:2, 3:8] # Red b = arr[0:5, 4:5] # Blue
如何在代码中从数学上判断两个切片是否垂直相交于一点?
以前的尝试:我尝试使用np.may_share_memory(a,b),但它返回True,即使它们不相交。
np.may_share_memory(a,b)
n1bvdmb61#
假设每个范围的start < end和step == 1(默认值),只有两种方法可以使一对范围不在给定轴上相交。对于每个轴,比较两个列表在该轴上的范围,检查重叠。(例如,检查1:2与0:5以及3:8与4:5。)如果所有轴都显示重叠,则形状重叠。
start < end
step == 1
1:2
0:5
3:8
4: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似乎没有提供一种方法来做到这一点。
bogh5gae2#
你试过intersect1d()功能吗?它将给予两个一维数组之间的公共元素。如果输入数组不是一维的,则会被展平。
intersect1d()
2条答案
按热度按时间n1bvdmb61#
假设每个范围的
start < end
和step == 1
(默认值),只有两种方法可以使一对范围不在给定轴上相交。对于每个轴,比较两个列表在该轴上的范围,检查重叠。(例如,检查
1:2
与0:5
以及3:8
与4:5
。)如果所有轴都显示重叠,则形状重叠。根据评论,看起来你的问题实际上可能是“在创建切片后如何获得切片的边界?”“Numpy似乎没有提供一种方法来做到这一点。
bogh5gae2#
你试过
intersect1d()
功能吗?它将给予两个一维数组之间的公共元素。如果输入数组不是一维的,则会被展平。