2

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

4

2 回答 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 回答