我正在使用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时它会起作用。有没有人对正在发生的事情以及如何解决这个问题有任何建议?
谢谢!
答案 0 :(得分:0)
在评论中,您说y
是3D(形状120x120x60)。您已在PyArray_FromObject
来电中设置了2D的上限:
// v right here
PyObject *barray = PyArray_FromObject(b, NPY_DOUBLE, 1, 2);