使用masked_where时的Numpy广播规则(或者它们不适用?)

时间:2014-01-22 22:54:46

标签: python arrays numpy mask

我想使用广播来使用一个数组(较低维度)中的值来屏蔽另一个数组(更高维度)。

一个例子是

a= np.arange(9).reshape(3,3)
b= np.arange(3)

我试过的是

c=np.ma.masked_where(b[:,np.newaxis]>1, a)

但它以“IndexError: Inconsistant[sic] shape between the condition and the input (got(3,1) and (3,3))

失败

这是令人困惑的,因为广播应该在这里应用,而b应该广播到a。 解决方法是构建正确大小的临时d数组

d=np.broadcast_arrays(b[:,np.newaxis],a)[0]

并在masked_where声明

中使用它
c=np.ma.masked_where(d>1,a)

但这违反了使用np.newaxis来避免临时数组的范例。

OBTW,使用where命令允许以这种方式进行广播

c=np.where(b[:,np.newaxis]>1, 0.0, a)

按预期工作。

此外,如果masked_where中的条件始终为false,则命令将无错执行...

c=np.ma.masked_where(b[:,np.newaxis]>5, 0.0, a)

将产生a

FWIW,我正在使用numpy 1.6.1。

0 个答案:

没有答案