【发布时间】:2017-03-14 12:32:27
【问题描述】:
我正在尝试在 C++ 中为 numpy 创建一维数组:
PyObject* foo()
{
npy_intp length[1];
length[0] = 10;
PyObject* my_array = PyArray_SimpleNew(1, length, NPY_DOUBLE);
return boost::python::incref(my_array);
}
然后我做一个python模块:
BOOST_PYTHON_MODULE(pyMod)
{
using namespace boost::python;
import_array();
def("foo", foo);
}
当我在 python 中运行它时,调用 foo(),它在执行对 PyArray_SimpleNew 的调用时会出现段错误,即使我已经调用了 import_array,这似乎是导致这种段错误的常见原因。如果我制作一个维度为 [10, 1] 的二维数组,则效果很好,即:
PyObject* foo()
{
npy_intp length[2] = {10, 1};
PyObject* my_array = PyArray_SimpleNew(2, length, NPY_DOUBLE);
return boost::python::incref(my_array);
}
在python中是这样使用的
import numpy as np
import pyMod
if __name__ == "__main__":
v = pyMod.foo()
对为什么会出现此段错误有任何想法吗?
【问题讨论】:
-
在哪一行出现段错误?请提供带有详细错误消息的minimal reproducible example(不只是一个函数;向我们展示你如何调用它)
-
调用 PyArray_SimpleNew 时出现段错误
-
我的评论不仅仅是第一句话。
标签: python c++ numpy boost-python