我有2个具有相同形状的numpy数组。现在我想将除0之外的所有值从数组2复制到数组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中如何实现?
答案 0 :(得分:13)
Javadoc将返回不为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]
此解决方案就位。如果您需要创建新阵列,请参阅nonzero
。
答案 1 :(得分:9)
np.where
支持此功能。下面的解决方案创建一个新数组有关就地替代方案,请参阅@Tai's answer。
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]