【发布时间】:2013-11-06 16:53:16
【问题描述】:
我有两个 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 中的非屏蔽条目,而是执行普通副本。我是在正确的轨道上,还是应该去别处看看?
【问题讨论】:
-
不要像那样创建
z...如果您想要一个单行,请使用z = np.zeros_like(x) + 99,如果您不介意两个z = np.empty_like(a); z.fill(99)。在新的 numpy 1.8 中,您还可以使用z = np.full_like(a, 99)。 -
@Jaime 或者根本不要创建
z,因为任何解决方案都可以简单地使用z = 99进行广播。