Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取ndarray时boost python-nullptr 我有一个C++代码,用PosithPython包执行Python脚本。只要我从python中提取int、string或其他非数组变量,一切都很好。但是,我必须提取一个numpy::ndarray并将其转换为cpp向量。我尝试了以下方法:_Python_C++_Boost_Boost Python_Numpy Ndarray - Fatal编程技术网

提取ndarray时boost python-nullptr 我有一个C++代码,用PosithPython包执行Python脚本。只要我从python中提取int、string或其他非数组变量,一切都很好。但是,我必须提取一个numpy::ndarray并将其转换为cpp向量。我尝试了以下方法:

提取ndarray时boost python-nullptr 我有一个C++代码,用PosithPython包执行Python脚本。只要我从python中提取int、string或其他非数组变量,一切都很好。但是,我必须提取一个numpy::ndarray并将其转换为cpp向量。我尝试了以下方法:,python,c++,boost,boost-python,numpy-ndarray,Python,C++,Boost,Boost Python,Numpy Ndarray,main.cpp #include <iostream> #include <boost/python.hpp> #include <boost/python/numpy.hpp> using namespace boost::python; int main() double t_end=7 try { Py_Initialize(); object module = import("__main__"); obj

main.cpp

#include <iostream>
#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

using namespace boost::python;

int main()
double t_end=7
    try
    {
    Py_Initialize();
    object module = import("__main__");
    object name_space = module.attr("__dict__");
    exec_file("MyModule.py", name_space, name_space);

    object MyFunc = name_space["MyFunc"];
    object result = MyFunc(t_end);

    auto result_array = extract<numpy::ndarray>(result);
    const numpy::ndarray& ret = result_array();
    int input_size = ret.shape(0);
    double* input_ptr = reinterpret_cast<double*>(ret.get_data());
    std::vector<double> v(input_size);
    for (int i = 0; i < input_size; ++i)
        v[i] = *(input_ptr + i);
}
catch (error_already_set)
{
    PyErr_Print();
}

Py_Finalize();
但是,它以错误结束:

读取访问冲突BOOST\u NUMPY\u ARRAY\u API为空ptr


我还试图直接声明numpy::ndarray,就像
numpy::ndarray result\u array=extract(result)但错误完全相同。我已经通过直接从python打印检查了我的
ndarray
是否为空,它是否为空。在python步骤中,一切似乎都是正确的。那么,是什么导致了冲突以及如何修复它呢?

由于您在使用
numpy
模块时没有首先初始化它,因此会发生此错误

请注意官方的开头:

初始化Python运行时和numpy模块。在分段错误中调用这些结果失败:

namespace np = boost::python::numpy;
int main(int argc, char **argv)
{
  Py_Initialize();
  np::initialize();

您的代码缺少对
np::initialize()的调用

如果你的意思是设置标题,我做了。我知道这个教程,但是它对我的问题没有帮助。关于使用数组,它更一般,在我的例子中,我认为问题在于提取步骤。我可以从
intinput\u size=ret.shape(0)开始注释所有内容,但仍然失败,并出现相同的错误。请提供。确定。问题已编辑。您在使用numpy模块之前忘记初始化它。添加
numpy::initialize()Py_Initialize()后的code>。谢谢,现在它可以工作了。我的信念是错误的,那是错误的;还将对衍生品进行初始化。当我读教程的时候,我忘记了这个小细节。
namespace np = boost::python::numpy;
int main(int argc, char **argv)
{
  Py_Initialize();
  np::initialize();