我正在使用 boost.numpy 并尝试制作 ndarray 包装器。我正在尝试将 ndarray 从 python 发送到 c++,将 c++ 发送到 python。当我将 ndarray 从 python 发送到 c++ 时,问题就出现了。哪里不对?
+++mod2.cpp+++
1 #include"boost/numpy.hpp"
2 #include<iostream>
3
4 boost::numpy::ndarray test(boost::numpy::ndarray a){
5 boost::numpy::ndarray b = a;
6 int arr[]={5,4,3,2,1};
7 b = boost::numpy::from_data(arr,boost::numpy::dtype::get_builtin<int>(),
8 boost::python::make_tuple(5),boost::python::make_tuple(sizeof(int)),boost::python::object());
9 std::cout << "In mymod2.cpp:" <<
10 boost::python::extract < char const * > (boost::python::str(b)) << std::endl ;
11 return b;
12 }
13
14 BOOST_PYTHON_MODULE(mymod2){
15 boost::numpy::initialize();
16 boost::python::def("test",test);
17 }
+++demo.py+++
1 import numpy
2 import mymod2
3
4 Mat1 = numpy.array([1,2,3,4,5], dtype=numpy.int32)
5 print("In demo.py:",Mat1)
6 Mat2=mymod2.test(Mat1)
7 print("In demo.py:",Mat2)
+++Output+++
In demo.py: [1 2 3 4 5]
In mymod2.cpp:[5 4 3 2 1]
In demo.py: [ 0 48 430934944 32509 3]
最佳答案
我不明白为什么,但是如果你使用:
int *arr;
arr = new int[5];
arr[0] = 5;
arr[1] = 4;
arr[2] = 3;
arr[3] = 2;
arr[4] = 1;
代替 int arr[]={5,4,3,2,1}
,它将正确的数组返回给 python 代码。
关于python - 如何在 boost-numpy 库中使用 boost::numpy::from_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819829/