Обновление значений массивов на основе нескольких условий - PullRequest
0 голосов
/ 02 мая 2019

У меня есть массив P, как показано ниже:

P
array([[ 0.49530662,  0.32619367,  0.54593724, -0.0224462 ],
       [-0.10503237,  0.48607405,  0.28572714,  0.15175049],
       [ 0.0286128 , -0.32407902, -0.56598029, -0.26743756],
       [ 0.14353725, -0.35624814,  0.25655861, -0.09241335]])

и вектор y:

y
array([0, 0, 1, 0], dtype=int16)

Я хочу изменить другую матрицу Z с такой жеразмерность как P, такая, что Z_ij = y_j, когда Z_ij < 0.

. В приведенном выше примере моя матрица Z должна быть

Z = array([[-, -, -, 0],
       [0, -, -, -],
       [-, 0, 1, 0],
       [-, 0, -, 0]])

Где '-' указывает на оригинал Z ценности.Я подумал об очень простой реализации, которая в основном перебирает каждую строку Z и сравнивает значения столбцов с соответствующими Y и P.Знаете ли вы какой-нибудь лучший подход к питону / NumPy?

1 Ответ

1 голос
/ 02 мая 2019

Что вам нужно, это np.where.Вот как это использовать: -

import numpy as np
z = np.array([[ 0.49530662,  0.32619367,  0.54593724, -0.0224462 ],
       [-0.10503237,  0.48607405,  0.28572714,  0.15175049],
       [ 0.0286128 , -0.32407902, -0.56598029, -0.26743756],
       [ 0.14353725, -0.35624814,  0.25655861, -0.09241335]])
y=([0, 0, 1, 0])
result = np.where(z<0,y,z)
#Where z<0, replace it by y

Результат

>>> print(result)
[[0.49530662 0.32619367 0.54593724 0.        ]
 [0.         0.48607405 0.28572714 0.15175049]
 [0.0286128  0.         1.         0.        ]
 [0.14353725 0.         0.25655861 0.        ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...