Я сравниваю два фрагмента одного и того же массива. Два среза одинаковы, за исключением того, что они смещены по оси [1]. Я сравниваю эти два фрагмента и через некоторое время возвращаю их минимум l oop.
Мое ожидание: Размер массивов остается неизменным относительно друг друга, уменьшаясь на величину of «offset»
Что происходит вместо: Один из массивов уменьшается в размере относительно другого во второй итерации, уменьшаясь более чем на значение «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 l oop:
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