scipy.io.loadmat()导致一个指向PyImport_Import()的空指针

时间:2018-04-12 19:41:43

标签: python c++ visual-studio-2015 scipy

我正在使用scipy.io通过python加载.mat文件。然后我想在visual studio中使用c ++导入这个python脚本。

实施例。 1: testpython.py

    b=[0,1,2,3]

testimport.cpp

    PyObject *pName = PyUnicode_FromString((char*)"testpython");

    std::cout << pName << std::endl; 

    // Load the module object

    PyObject *pModule = PyImport_Import(pName);

    std::cout << pModule << std::endl;

    PyObject *b = PyObject_GetAttrString(pModule, "b");

    std::cout << b << std::endl;

    PyObject *barray = PyArray_FromObject(b, NPY_DOUBLE, 1, 2);

    std::cout << barray << std::endl;

这样可行,但这不是我想做的事。

实施例。 2:

testpython.py

     import scipy.io as sio

     x=sio.loadmat('matfile.m')

     y=x['variable1']

testimport.cpp

     PyObject *pName = PyUnicode_FromString((char*)"testpython");

     std::cout << pName << std::endl; 

     // Load the module object

     PyObject *pModule = PyImport_Import(pName);

     std::cout << pModule << std::endl;

     PyObject *b = PyObject_GetAttrString(pModule, "y");

     std::cout << b << std::endl;

     PyObject *barray = PyArray_FromObject(b, NPY_DOUBLE, 1, 2);

     std::cout << barray << std::endl;

当在python中使用sio.loadmat时,pModule返回null并且代码中断,但是当不使用sio.loadmat时它会起作用。有没有人对正在发生的事情以及如何解决这个问题有任何建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

在评论中,您说y是3D(形状120x120x60)。您已在PyArray_FromObject来电中设置了2D的上限:

//                                                      v right here
PyObject *barray = PyArray_FromObject(b, NPY_DOUBLE, 1, 2);