Как добавить массив дважды по двум ИСТИННЫМ условиям? - PullRequest
0 голосов
/ 29 ноября 2018

это мой код:

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

B = np.array([[0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0]])

F = np.array([[0, 0, 0, 0, 0],
          [0, 0, 0, 0, 1],
          [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]])

if F[2, 4] == 1:
    B = np.add(M, B)

if F[1, 4] == 1:
    M_shift = shift(M, (-1, 0), cval=0)
    B = np.add(M_shift, B)

print(B)

Я хочу добавить M к B, если условие для F истинно.В этом примере оба условия if верны, и я подумал, что мой код добавит два раза M к B. Но, видимо, это не работает?Что не так?

Заранее спасибо.

РЕДАКТИРОВАТЬ для arra:

Мой желаемый вывод в этом случае, мой фрагмент кода должен добавить матрицу с B, а такжесдвинутая версия М. Потому что оба условия верны.Но, как вы сказали, первое назначение перезаписываетсяКак я могу предотвратить перезапись для этого случая?

Вывод после присваивания должен выглядеть следующим образом:

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

Полагаю, хорошим способом является использование цикла for, потому что я хочу проверить все записи массива в матрице F,если есть 1. Но я считаю, что если я использую функцию np.add, я перезапишу ее снова

1 Ответ

0 голосов
/ 29 ноября 2018

Вы перезаписываете B во втором, если, поэтому любое предыдущее значение будет стерто.Не уверен, что вы пытаетесь достичь в своем коде, но разве вы не хотите что-то вроде:

B = np.add(M_shift, B)

или

intermediateVal = np.add(M_shift, F)
B = np.add(B, intermediateVal)
...