【发布时间】:2022-01-22 15:18:21
【问题描述】:
我是 NumPy 的 C extensions 的新手,我想知道以下工作流程是否可行。
- 在 NumPy 中预分配一个数组
- 将此数组传递给 C 扩展
- 在 C 中就地修改数组数据
- 在 Python 中将更新后的数组与标准 NumPy 函数结合使用
特别是,我希望这样做,同时确保我在任何步骤都制作零个新副本。
我熟悉 C 端的样板,例如 PyModuleDef、PyMethodDef 和 PyObject* 参数,但我见过的很多例子都涉及对 C 数组的强制转换,据我所知,这涉及复制和/或铸造。我也知道 Cython,尽管我不知道它是否会在后台进行类似的强制或复制。我对具有数字(例如int32)值的ndarray 上的简单索引get 和set 操作特别感兴趣。
有人可以提供一个创建 NumPy 数组、在 C 扩展中就地修改它并随后在 Python 中使用结果的最小工作示例吗?
【问题讨论】:
-
你想到了什么样的修改?您对
numpy数据模型的熟悉程度如何?它使用shape、strides和dtype来访问data-buffer中的元素? -
cython 不会创建 numpy 数组的新副本(除非您自己专门创建它们),请参阅 Working with NumPy
-
@hpaulj 不是很; Array API 会是一个好的起点吗?
-
@AhmedAEK 通常比原始 C 扩展更喜欢 cython?
标签: python arrays numpy python-c-api