python - 如何在 boost-numpy 库中使用 boost::numpy::from_data

标签 python c++ numpy boost multidimensional-array

我正在使用 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/

相关文章:

c++ - 未处理的异常,传递对象?

python - 导入wx.lib.py时为"Import Error: NumPy not found"

python - 加快内核估计的采样

python - 循环 URL 列表并保存为 txt 文件

python - 正则表达式为??? (三个相邻的问号)用于 PyCharm 的代码标签

Python 等同于 Java Exception with cause

python - numpy.histogram2d 的问题

python - 解析 JSON 时彻底修复 KeyError NoneType

c++ - 函数 get_size 在哪里?

c++ - 在 macOS Mojave 上安装 SharpSAT - 找不到 "' gmpxx.h' 文件”