将矩阵的一部分叠加在另一个上面

时间:2013-11-06 16:53:17

标签: python image numpy

我有两个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中的非屏蔽条目,而是执行普通副本。我在这里走在正确的轨道上,还是应该到别的地方看看?

2 个答案:

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