Python:Numpy切片未一起比较/广播。 [x:y]与[0:y-x]要求不同的尺寸

问题描述 投票:0回答:2

我正在比较同一数组的两个切片。这两个切片相同,除了它们在[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循环中反复返回其最小值。我的...

python numpy slice numpy-broadcasting advanced-indexing
2个回答
0
投票

这解决了编码错误,导致该功能无法正常工作。它没有解释错误的潜在机制:


0
投票

您的第二个片段从缩小的image数组的结尾开始。问题是您的代码将image重新绑定到依次较小的数组,但是width变量保持不变(比原始大小小1)。您可能需要在循环内更新width

© www.soinside.com 2019 - 2024. All rights reserved.