【问题标题】:creating a 3d numpy array from a non-contigous set of contigous 2d slices从一组不连续的连续 2d 切片创建 3d numpy 数组
【发布时间】:2023-03-22 07:23:01
【问题描述】:

是否可以使用 PyArray_NewFromDescr 从一组连续的二维数组创建 numpy 数组对象,而无需复制数据?

【问题讨论】:

    标签: c++ python numpy python-c-api


    【解决方案1】:

    您的帖子有轻微的不一致;我假设您的标题描述了您想要的内容。查看 Python API 文档,PyArray_NewFromDescr 只接受一个指向预分配内存的指针,所以答案几乎肯定是否定的。看来您可能可以巧妙地使用strides 参数来实现这一点;但即便如此,非连续内存也必须以常规方式布局。

    此外,从PyArray_CheckStrides 来看,这显然不是 numpy 想要你做的,它似乎假设了一个连续的内存块。

    【讨论】:

      【解决方案2】:

      简短的回答,不。

      Numpy 期望所有数据都以简单的跨步模式放置。当迭代数组时,为了在一个维度上前进,它会在内存中的位置添加一个常量,即该维度的步幅大小。因此,除非您的 2-d 切片定期布局(例如,较大的 3-d 数组的每隔一行),numpy 将需要复制数据。

      如果您确实有该订单,您可以做您想做的事。您需要创建一个 PyArray 结构,其中数据指向第一项,步幅对于布局是正确的,并且描述也是正确的。最重要的是,您需要将基本成员设置为另一个 python 对象,以在此视图存在时保持大块内存处于活动状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-13
        • 2020-01-15
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多