小编Jim*_*ker的帖子

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

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

一个例子是

a= np.arange(9).reshape(3,3)
b= np.arange(3)
Run Code Online (Sandbox Code Playgroud)

我试过的是

c=np.ma.masked_where(b[:,np.newaxis]>1, a)
Run Code Online (Sandbox Code Playgroud)

但它失败了" 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]
Run Code Online (Sandbox Code Playgroud)

并在masked_where声明中使用它

c=np.ma.masked_where(d>1,a)
Run Code Online (Sandbox Code Playgroud)

但这违背了通过使用避免临时数组的范例np.newaxis.

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

c=np.where(b[:,np.newaxis]>1, 0.0, a)
Run Code Online (Sandbox Code Playgroud)

按预期工作.

此外,如果该条件中的条件masked_where始终为false,则命令将执行而不会出现错误...

c=np.ma.masked_where(b[:,np.newaxis]>5, 0.0, a)
Run Code Online (Sandbox Code Playgroud)

会屈服a.

FWIW,我正在使用numpy 1.6.1.

python arrays numpy mask

5
推荐指数
0
解决办法
1418
查看次数

标签 统计

arrays ×1

mask ×1

numpy ×1

python ×1