从一组非连续的连续2d切片创建一个3d numpy数组

时间:2011-03-01 14:09:45

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

是否可以使用PyArray_NewFromDescr从一组连续的2d数组创建numpy数组对象,而不复制数据?

2 个答案:

答案 0 :(得分:1)

你的帖子略有不一致;我假设你的头衔描述了你想要的东西。查看Python API文档,PyArray_NewFromDescr仅接受指向预分配内存的单个指针,因此答案几乎肯定是否定的。您似乎可能能够以聪明的方式使用strides参数来实现此目的;但即便如此,非连续的记忆也必须以常规方式进行布局。

此外,这显然不是numpy要你做的事情,从PyArray_CheckStrides判断,它似乎假设一块连续的记忆。

答案 1 :(得分:1)

简短回答,不。

Numpy期望所有数据都以简单,跨越的方式铺设。迭代数组时,为了在维度中前进,它会将一个常量(该维度的步幅大小)添加到内存中的位置。因此,除非定期布置2-d切片(例如,更大的3-d阵列的每隔一行),否则numpy将需要复制数据。

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