numpy C API中的import_array如何工作?

时间:2018-10-16 06:05:58

标签: python c++ numpy c-api

我试图将c ++中的c样式数组转换为numpy数组,并在尝试使用“ PyArray_SimpleNewFromData”函数时遇到问题。原来我需要打电话

import_array()

尽管我不明白如何调用此函数。每当我尝试调用它时,我都会得到编译器错误,我无法理解。例如,编写以下简单脚本:

#include <Python.h>
#include <numpy/arrayobject.h>

int main(){
    Py_Initialize();
    import_array();
    Py_Finalize();
    return 0;
}

产生编译器错误

  

错误:函数返回'int'[-fpermissive]中没有值的返回语句   import_array();

我看了几个例子,例如:

Numpy C-Api example gives a SegFault

PyArray_SimpleNewFromData example

https://codereview.stackexchange.com/questions/92266/sending-a-c-array-to-python-numpy-and-back

Numpy/CAPI error with import_array() when compiling multiple modules

但是无论我尝试什么(即使看似遵循这些示例),我似乎也遇到了上面的编译器错误。我想念什么或做错什么?欢迎解释如何调用import_array()函数。感谢您的帮助!

更新:

我正在使用python 2.7.11,我认为这可能与此处讨论的内容有关:

https://github.com/clemenscorny/brisk/issues/3

但是我仍然不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

从numpy读取<Author> Ignacy Krasicki </Author> <Title> The world is broken </Title> <Contents> It is allowed to go crazy with young people, be slow to deceive old people. (there is more text) </Content> 的源代码,它是一个主要调用import_array()常规函数的宏,然后执行一些奇怪的异常处理。如果您调用_import_array()而不是_import_array(),则编译错误将消失。而且,至少就我而言,行为是正确的(即调用Numpy C API函数时没有段错误)