我正在比较同一数组的两个切片。这两个切片相同,除了它们在[1]轴上偏移。我比较这两个切片,并在while循环中反复返回其最小值。
我的期望:数组的大小相对于彼此保持不变,缩小了“ offset”的值]
发生什么情况:在第二次迭代中,其中一个数组的大小相对于另一个数组缩小,缩小的幅度大于“偏移量”的值]
由于我使用相同的偏移值进行比较,并且(x-y)-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
我正在比较同一数组的两个切片。这两个切片相同,除了它们在[1]轴上偏移。我比较这两个切片,并在while循环中反复返回其最小值。我的...
这解决了编码错误,导致该功能无法正常工作。它没有解释错误的潜在机制:
您的第二个片段从缩小的image
数组的结尾开始。问题是您的代码将image
重新绑定到依次较小的数组,但是width
变量保持不变(比原始大小小1)。您可能需要在循环内更新width
。