[英]How to change 2d numpy array's element based on condition
假设我有三个 2D numpy 数组和一个加权 1D numpy 数组,我想将其加权到数组中的某个特定元素
import numpy as np
A= np.array([[2,0,2,2],[0,0,1,1],[1,2,1,0]])
B = np.array([[2,1,1,0],[2,2,0,2],[0,0,0,2]])
C = np.array([[0,0,3,2],[1,2,2,1],[2,3,1,5]])
Weight = np.array([0. , 0.5, 2. ])
Weight.reshape(-1,1)
第一个条件:当我们对这些数组求和时,如下所示
sum = np.sum(A,axis=0) +np.sum(B,axis=0) + np.sum(C,axis=0)
对于大于10 的任何内容,我们选择如下所示的数组。
#selecting last 2 columns
A_1 = A[:,np.sum(A,axis=0) +np.sum(B,axis=0) + np.sum(C,axis=0) > 10]
B_1 = B[:,np.sum(A,axis=0) +np.sum(B,axis=0) + np.sum(C,axis=0) > 10]
C_1 = C[:,np.sum(A,axis=0) +np.sum(B,axis=0) + np.sum(C,axis=0) > 10]
(array([[2, 2],
[1, 1],
[1, 0]]),
array([[1, 0],
[0, 2],
[0, 2]]),
array([[3, 2],
[2, 1],
[1, 5]]))
第二个条件:当A_1 + B_1 - C_1 <0时,我们想修改元素为(A+B)*weight
diff = A_1 + B_1 - C_1 <0
(array([[False, False],
[ True, False],
[False, True]]),
array([[ 0, 0],
[-1, 2],
[ 0, -3]]))
对于我们有 True 的地方,我们想将 C_1 更改为
[[3, 2],
[(1+0)*0.5, 1],
[1, (0+2)*2.0]]
(1+0)*0.5 因为 0.5 在第二行, (0+2)*2.0 因为 2.0 在第三行
因此最后 C 变成..
array([[0, 0, 3, 2],
[1, 2, (1+0)*0.5, 1],
[2, 3, 1, (0+2)*2.0]]))
我想在不使用循环的情况下实现这个结果C .. 任何帮助将不胜感激。
您可以使用掩码:
AB = A+B
m1 = (AB+C).sum(0)>10
m2 = (AB-C) < 0
m = m1&m2
C = C.astype(float)
C[m] = (AB*Weight)[m]
更新C
:
array([[0. , 0. , 3. , 2. ],
[1. , 2. , 0.5, 1. ],
[2. , 3. , 1. , 4. ]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.