我有一个数组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
进行比较。您知道更好的pythonic / numpy方法吗?
答案 0 :(得分:1)
您需要的是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. ]]