我有一个非常大的数组,但我将使用一个较小的数组来解释
给定源数组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数组,,X
和Y
是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)