我有两个numpy数组 - 基本上是SimpleCV图像的numpy表示。其中一个矩阵包含大多数零条目,除了一些不是。我想将那些非零条目复制到另一个矩阵。我可以使用简单的for
循环轻松完成它,但出于清晰度和性能原因,我想使用numpy。在阅读文档之后,看起来像掩盖数组是要走的路,但是我无法弄清楚如何告诉numpy只能复制非掩码的条目。一个虚拟的例子:
x = np.array([1,2,31,32,4,0,3,0,0,0])
y = np.ma.masked_where(x == 0, x)
z = np.array([99] * len(x))
z[:] = y
我希望y
只更新z
中的非屏蔽条目,而是执行普通副本。我在这里走在正确的轨道上,还是应该到别的地方看看?
答案 0 :(得分:2)
你走在正确的轨道上。您可以使用masked_where
的{{1}}运算符找到x
中不为0的值,而不是使用!=
:
ndarrays
答案 1 :(得分:2)
您可以使用np.where
的3参数形式:
>>> import numpy as np
>>> x = np.array([1,2,31,32,4,0,3,0,0,0])
>>> z = np.array([99] * len(x))
>>> y = np.where(x != 0, x, z)
>>> y
array([ 1, 2, 31, 32, 4, 99, 3, 99, 99, 99])