Python 根据不同阵列的条件交换2个numpy阵列
我有4个数组,A,B,C,D。A和B有形状(n,n),C/D有形状(n,n,m)。我试图设置它,当A的元素大于B时,长度m的数组本质上属于CPython 根据不同阵列的条件交换2个numpy阵列,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,我有4个数组,A,B,C,D。A和B有形状(n,n),C/D有形状(n,n,m)。我试图设置它,当A的元素大于B时,长度m的数组本质上属于C C_new=np.其中(A>B,C,D),D_new=np.其中(AB)[…,np.newaxis],C,D) D_new=np.式中((A
C_new=np.其中(A>B,C,D)
,D_new=np.其中(A
。但是,这给了我一个值错误(操作数无法与形状一起广播)
)
我很好奇是否可以在这里使用where
,而不只是循环遍历每个元素
编辑:示例:
A = np.ones((2,2))
B = 2*np.eye(2)
C = np.ones((2,2,3))
D = np.zeros((2,2,3))
# Cnew = np.where(A > B, C,D)-> ValueError: operands could not be broadcast together with shapes (2,2) (2,2,3) (2,2,3)
Cnew在(0,0)和(1,1)索引中为零。您需要在条件末尾添加一个新轴,以便正确广播:
C_new=np.where((A>B)[…,np.newaxis],C,D)
D_new=np.式中((A
请提供一些样本数据和预期结果。它不必很大,只有几列和几行。添加了一个简单的示例。