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

时间:2018-01-29 12:36:15

标签: python arrays numpy

我有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中如何实现?

2 个答案:

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