如何使用boost :: numpy :: from_data在boost numpy库中
How to use boost::numpy::from_data in boost-numpy library
我正在使用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}
,它将返回正确的数组。
int arr [] = {5,4,3,2,1}在堆栈上。从_data引用传递给它的数据,它不会复制它,因此您的返回堆栈地址在ndarray中。使用新的意味着此问题是可以避免的,因为内存在堆上,但是现在数据正在泄漏。您需要使用所有者参数来管理NDARRY释放时的内存整理。
您可以在用
返回 之前创建对数组的新引用np::ndarray new_b = b.copy();
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 传递 boost::p ython::numpy::ndarray 作为 boost::p ython 函数的(默认或非
- Boost Python Numpy - 要初始化的未定义引用
- 链接问题 boost::p ython::numpy.
- 使用 Boost.Python 将 numpy 数组传递给C++
- 使用Boost交换Python和C numpy阵列
- 使用boost::numpy时LNK2001错误
- 带有Boost Python的Wrap C 功能 - Numpy数组类型
- 如何使用boost :: numpy :: from_data在boost numpy库中
- 如何从 boost::p ython 返回 numpy.array
- 使用boost::numpy:: narray时出现分段错误