是否可以使用PyArray_NewFromDescr从一组连续的2d数组创建numpy数组对象,而不复制数据?
答案 0 :(得分:1)
你的帖子略有不一致;我假设你的头衔描述了你想要的东西。查看Python API文档,PyArray_NewFromDescr
仅接受指向预分配内存的单个指针,因此答案几乎肯定是否定的。您似乎可能能够以聪明的方式使用strides
参数来实现此目的;但即便如此,非连续的记忆也必须以常规方式进行布局。
此外,这显然不是numpy要你做的事情,从PyArray_CheckStrides
判断,它似乎假设一块连续的记忆。
答案 1 :(得分:1)
简短回答,不。
Numpy期望所有数据都以简单,跨越的方式铺设。迭代数组时,为了在维度中前进,它会将一个常量(该维度的步幅大小)添加到内存中的位置。因此,除非定期布置2-d切片(例如,更大的3-d阵列的每隔一行),否则numpy将需要复制数据。
如果你有这个订单,你可以做你想要的。您需要创建一个PyArray结构,其中数据指向第一个项目,步幅对于布局是正确的,并且descr也是正确的。最重要的是,您需要将基本成员设置为另一个python对象,以便在此视图存在时保持您的大块内存存活。