Проблемы со смещением матрицы - PullRequest
0 голосов
/ 02 декабря 2018

это мой код, и у меня есть несколько проблем:

import numpy as np
from scipy.ndimage.interpolation import shift

index_default = np.array([2, 4])
b = np.zeros((5, 5), dtype=float)
f = np.array([[0, 0, 0, 0, 1],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 0, 1],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0]])
 m = np.array([[1, 2, 1, 2, 1],
              [1, 2, 1, 2, 1],
              [1, 2, 1, 2, 0],
              [1, 2, 1, 2, 1],
              [1, 2, 1, 2, 1]])

for index, x in np.ndenumerate(f):
 if x == 1:
    a = np.asarray(index)
    y = np.subtract(a, index_default)
    m_shift = shift(m, (y[0], y[1]), cval=0)
    b += np.add(m_shift, b)
    print(m_shift)
    print(b)

ТАК, когда я просто хочу напечатать m_shift, код покажет мне только два массива m_shift.Если я выполню этот код, как показано с помощью print (b), он покажет мне ТРИ массива m_shift.Кроме того, он рассчитывается не интуитивно.Для меня вывод должен быть:

f = np.array([[2, 4, 2, 4, 1],
              [2, 4, 2, 4, 2],
              [2, 4, 2, 4, 1],
              [1, 2, 1, 2, 1],
              [1, 2, 1 ,2, 1]])

Я думаю, что оператор + = создает проблемы.Но я думаю, что должен использовать это, потому что я хочу сохранить результат из цикла и не перезаписывать его

1 Ответ

0 голосов
/ 02 декабря 2018

Измените b + = на b =.

b+= ... # corresponds to  b = b + add(m_shift,b)
        # net effect is that b = b + m_shift + b I think you intend b=b+m_shift   

b+=m_shift # probably works too.
...