Numpy maskedarray缺少堆栈功能

时间:2017-05-18 17:27:13

标签: python arrays python-2.7 numpy

我正在使用Numpy 1.12.1。

根据vstack

的文件
  

此功能继续支持向后兼容性,但您应该更喜欢np.concatenate或np.stack。 np.stack函数在NumPy 1.10中添加。

但是没有numpy.ma.stack功能。尝试堆叠屏蔽数组时,np.stack函数无法正常工作。

我应该继续使用numpy.ma.vstack还是有另一种方法来实现相同的功能而不依赖于看似已弃用的功能?

1 个答案:

答案 0 :(得分:1)

我认为弃用声明夸大了stack的用处。没有人会停止使用vstackhstack。但这些都是concatenate的前端。我鼓励大家查看这些函数的源代码,看看他们在使用`concatenate之前如何操作维度。

我认为堆栈更像是np.array的概括。当给出2d数组的列表时,np.array将它们连接在前面的新轴上,产生一个3d数组。 np.stack允许您将它们连接到另外两个新轴上。

在给出1d数组列表时,

np.stack可以替换vstack。但如果给出1和2d的混合则不行。

Masked arrays稍微有点死水,并没有尽快获得新功能。使用它提供的功能,而不用担心stack文档。

ma.vstack确实(其中`func = np.vstack):

    _d = func(tuple([np.asarray(a) for a in x]), *args, **params)
    _m = func(tuple([getmaskarray(a) for a in x]), *args, **params)
    return masked_array(_d, mask=_m)

它在vstack.data部分上执行了mask,然后创建了一个新的屏蔽数组。看起来可以轻松扩展以使用np.stack