是否可以使用 PyArray_NewFromDescr 从一组连续的二维数组创建 numpy 数组对象,而无需复制数据?
问问题
442 次
2 回答
1
您的帖子有轻微的不一致;我假设您的标题描述了您想要的内容。查看 Python API 文档,PyArray_NewFromDescr
只接受一个指向预分配内存的指针,所以答案几乎肯定是否定的。看来您可以巧妙地使用该strides
参数来实现此目的;但即便如此,非连续内存也必须以常规方式布局。
此外,从 来看,这显然不是 numpy 想要你做的PyArray_CheckStrides
,这似乎假设了一个连续的内存块。
于 2011-03-01T14:41:58.517 回答
1
简短的回答,不。
Numpy 希望所有数据都以简单的跨步模式放置。当迭代数组时,为了在一个维度上前进,它会在内存中的位置添加一个常量,即该维度的步幅大小。因此,除非您的 2-d 切片定期布局(例如,较大的 3-d 数组的每隔一行),numpy 将需要复制数据。
如果你有那个订单,你可以做你想做的事。您需要创建一个 PyArray 结构,其中数据指向第一项,步幅对于布局是正确的,并且描述也是正确的。最重要的是,您需要将基本成员设置为另一个 python 对象,以在此视图存在时保持大块内存处于活动状态。
于 2011-03-01T20:11:25.647 回答