我正在比较同一数组的两个切片。这两个切片是相同的,只是它们在 [1] 轴上偏移。我比较这两个切片并在 while 循环中重复返回它们的最小值。
我的期望:数组的大小相对于彼此保持不变,按“偏移量”的值缩小
相反会发生什么:在第二次迭代中,其中一个数组的大小相对于另一个缩小,缩小幅度超过“offset”的值
由于我使用相同的偏移值来比较它们,并且作为 (xy) - 0 = x - (0 + y),这些值必须相同。对于第一次迭代,它们是相同的,但对于第二次迭代,它们不是,正如您从打印输出中看到的那样。
我认为这个问题可能与按值传递问题有关,所以我尝试使用 copy.deepcopy,但这也不能解决问题。我还认为索引溢出索引可能有一个怪癖,所以我将高度和宽度设置为少一点,以防万一,但这也没有产生任何效果。我想知道我是否可能对切片或高级索引的工作方式有根本的误解。
这是打印输出:
Slice 1: offset value: 1 height, width: 999 1332
Slice 2: offset value: 1 height, width: 999 1332
Slice 1: offset value: 2 height, width: 999 1331
Slice 2: offset value: 2 height, width: 999 1330
这是我得到的错误,它在 while 循环的第二次迭代中触发:
image = np.minimum(slice1, slice2)
ValueError: operands could not be broadcast together with shapes (999,1331) (999,1330)
这是我的代码:
def horizontal_smear(image, distance):
height = len(image) - 1
width = len(image[0] - 1)
offset = 1
while offset < distance /2:
slice1 = copy.deepcopy(image[0 : height, 0 : (width - offset)])
print ("Slice 1: offset value:", offset, " height, width:", len(slice1), len(slice1[0]))
slice2 = copy.deepcopy(image[0 : height, offset : width])
print ("Slice 2: offset value:", offset, " height, width:", len(slice2), len(slice2[0]))
image = np.minimum(slice1, slice2)
offset *= 2
return image