Numpy 屏蔽数组缺少堆栈函数



我正在使用Numpy 1.12.1。

根据 vstack 的文档

继续支持此函数以实现向后兼容性,但您应该首选 np.concatenate 或 np.stack。np.stack 函数是在 NumPy 1.10 中添加的。

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

我应该继续使用numpy.ma.vstack还是有另一种方法可以在不依赖看似已弃用的功能的情况下实现相同的功能?

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

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

当给定一维数组列表时,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)

它对.datamask部分执行vstack,然后创建一个新的屏蔽数组。 看起来它可以很容易地扩展到与np.stack一起工作.

最新更新