Как я могу заменить все номера массива на все номера другого массива, кроме нулей (Python, numpy)? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть два таких массива:

a = [[1,2,-3],[4,5,-6],[7,8,9]]
b = [[2,-5,0],[0,4,8],[-2,1,0]]

Каждое число «a» должно быть заменено на число из «b», кроме тех, где число «b» равно 0:

result = [[2,-5,-3],[4,4,8],[-2,1,9]]

Мое текущее решение занимает слишком много времени:

for row in range(len(b)):
    for column in range(len(b[row])):
        if b[row][column] != 0 or b[row][column] != -0:
            a[row][column] = b[row][column]

Кстати."b [row] [column]! = -0" необходимо?Так как в b иногда есть "0", а иногда "-0".

Есть ли быстрый путь?Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Одна возможность:

a[np.where(b !=0)] = b[np.where(b !=0)]
0 голосов
/ 13 сентября 2018

Просто используйте np.where()

a = np.array(a)
b = np.array(b)
a = np.where(b == 0, a, b)

Если вы хотите получить фантазию и сохранить память, используйте np.place()

np.place(a, b != 0, b[b != 0])

РЕДАКТИРОВАТЬ: Поскольку 0 == -0 оценивает TrueВам не нужны никакие другие чеки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...