【问题标题】:Numpy maskedarray missing stack functionNumpy maskedarray 缺少堆栈函数
【发布时间】:2017-05-18 17:27:12
【问题描述】:

我正在使用 Numpy 1.12.1。

根据vstack的文档

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

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

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

【问题讨论】:

    标签: python arrays python-2.7 numpy


    【解决方案1】:

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

    我认为堆栈更像是np.array 的概括。当给定一个二维数组列表时,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 一起使用。

    【讨论】:

    • 谢谢。对于它的价值,np.ma.vstack 也没有达到我的预期。我有一个 2d 蒙版数组列表,我只想将它们堆叠在一起以创建一个大的 3d 数组。 ma.vstack 最终沿着现有维度堆叠,而我真正想要的是一个新维度。我最终使用了np.ma.array(my_list_of_2d_arrays),效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多