繁体   English   中英

根据多个条件更新numpy数组值

[英]Updating a numpy array values based on multiple conditions

我有一个数组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)

我想修改另一个具有与P相同维度的矩阵Z ,以使Z_ij < 0Z_ij < 0 Z_ij = y_j

在上面的示例中,我的Z矩阵应为

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

其中“-”表示原始Z值。 我想到的是非常简单的实现,它基本上遍历Z每一行,并将列值与对应的YP进行比较。 您知道更好的pythonic / numpy方法吗?

您需要的是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.        ]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM