【问题标题】:Python C Extension with Numpy带有 Numpy 的 Python C 扩展
【发布时间】:2011-10-11 15:00:15
【问题描述】:

我正在尝试使用 Numpy 创建 Python 的 C 扩展,但在我的 C 代码中从 Numpy 读取数据时遇到了一些问题。

如果我在 Python 中创建一个像这样的简单数组,我可以读取 C 代码中的值:

Python:

from numpy import *
myarray = zeros([5, 20], dtype=uint32)

C:

value = (unsigned long*)PyArray_GETPTR2(myarray,0,0);    

问题是当我尝试从以下 Numpy 数组中读取值时:

Python:

from numpy import *
myarray = zeros([5], dtype=[('f1', 'S16'), ('f2', 'S16'), ('f3', uint64), ('f4', uint32)] )

C:

value = (void*)PyArray_GETPTR1(myarray,0);

这种情况下的值是什么样的og数据类型?

【问题讨论】:

  • 您遇到什么错误?它们是在编译时还是运行时?
  • 我并没有真正得到错误。我只是不知道如何从 value 中读取 S16、S16、uint64 和 uint32。

标签: python c numpy


【解决方案1】:

Numpy 结构化数据类型默认等同于 C 打包结构。但是,它们也可以更复杂。

要访问这些字段,请检查例如myarray.dtype.fields['f3'],在您的情况下是 (dtype('uint64'), 32)。您应该可以通过(npy_uint64*)(((char*)value) + 32)访问相应的数据。

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多