我试图将c++中的c风格数组转换为numpy数组,并在尝试使用“PyArray_SimpleNewFromData”函数时遇到问题。
import_array()
虽然我不明白如何调用这个函数。每当我尝试调用它时,我都会遇到编译器错误,我无法理解。例如编写以下简单脚本:
#include <Python.h>
#include <numpy/arrayobject.h>
int main(){
Py_Initialize();
import_array();
Py_Finalize();
return 0;
}
产生编译器错误
错误:return-语句没有值,在函数返回'int' [-fpermissive] import_array()中;
我看了几个例子,比如:
Numpy C-Api示例给出了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
但我还是不知道怎么解决
2条答案
按热度按时间vlf7wbxs1#
从numpy中阅读
import_array()
的源代码,它是一个宏,主要调用_import_array()
常规函数,然后进行一些奇怪的异常处理。如果调用_import_array()
而不是import_array()
,编译错误就会消失。而且,至少在我的情况下,行为是正确的(即调用Numpy C API函数时没有segfault)huwehgph2#
这是numpy中的一个bug:
import_array()
是一个宏,可以返回0
或NULL
或无(void)。在strict模式下编译器会验证函数的返回类型,因此无法使用。返回整数的函数不能返回
NULL
。返回指针的函数不能返回0
。返回某些值的函数不能不返回任何值。有一个替代宏可以使用
import_array(0)
参见numpy源代码
__multiarray_api.h