Numpy数组赋值布尔索引数组



我有一个非常大的数组,但我将使用一个较小的数组来解释

给定源数组X

X = [ [1,1,1,1],
[2,2,2,2],
[3,3,3,3]]

相同大小的目标数组Y

Y = [ [-1,-1,-1,-1],
[-2,-2,-2,-2],
[-3,-3,-3,-3]]
和赋值数组IDX:
IDX = [ [1,0,0,0],
[0,0,1,0],
[0,1,0,1]] 

我想通过IDX将Y赋值给X -仅在IDX==1时赋值在本例中,类似于:

X[IDX] = Y[IDX]

将导致:

X = [ [-1,1,1,1],
[2,2,-2,2],
[3,-3,3,-3]]

如何在numpy/pandas中有效地完成(而不是for循环)?Thx

如果IDX是布尔类型的NumPy数组,XY是NumPy数组那么你的直觉起作用了:

X = np.array(X)
Y = np.array(Y)
IDX = np.array(IDX).astype(bool)
X[IDX] = Y[IDX]

这改变了X的位置。

如果你不想做所有这些类型转换,或者不想覆盖X,那么np.where()一次完成你想要的:

np.where(IDX==1, Y, X)