我有两个形状相同的numpy数组。现在我想将数组2中除了0以外的所有值复制到数组1中。
数组1:
[1, 1, 1]
[1, 1, 1]
[1, 1, 1]
数组2:
[0, 2, 0]
[4, 0, 0]
[6, 6, 0]
结果现在应该是这样的:
[1, 2, 1]
[4, 1, 1]
[6, 6, 1]
这在Python中怎么可能实现?
nonzero
将返回一个数组中非0的索引。
idx_nonzero = B.nonzero()
A[idx_nonzero] = B[idx_nonzero]
nonzero
是当只传递条件时,numpy.where
返回的结果。因此,我们可以等价地执行以下操作:
idx_nonzero = np.where(B != 0) # (B != 0).nonzero()
A[idx_nonzero] = B[idx_nonzero]
这个解决方案是原地实现的。如果你需要创建一个新的数组,请参考@jp_data_analysis'答案。
np.where
支持此操作。下面的解决方案创建一个新数组。如需原地替换,请参见@Tai的答案。
A = np.array(
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
B = np.array(
[[0, 2, 0],
[4, 0, 0],
[6, 6, 0]])
C = np.where(B==0, A, B)
# [1, 2, 1]
# [4, 1, 1]
# [6, 6, 1]