从数组2复制数值(除了0)到数组1

5

我有两个形状相同的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中怎么可能实现?
2个回答

13

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'答案


9

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接