首页 > 代码库 > 记录numpy和c++的混合编程
记录numpy和c++的混合编程
准备记录numpy和c++的混合编程
#include <boost/python.hpp> #include <numpy/ndarrayobject.h> namespace bp = boost::python; void reference_contiguous_array(PyObject* in, PyArrayObject* in_con, double* ptr, int& count) { in_con = PyArray_GETCONTIGUOUS((PyArrayObject*)in); ptr = (double*)PyArray_DATA(in_con); int num_dim = PyArray_NDIM(in_con); npy_intp* pdim = PyArray_DIMS(in_con); count = 1; for (int i = 0; i < num_dim; i++) { count *= pdim[i]; } } void dereference(PyObject* o) { Py_DECREF(o); } PyObject* entry_square_matrix(PyObject* input_matrix) { // get the input array double* ptr; int count; PyArrayObject* input_contigous_array; reference_contiguous_array(input_matrix, input_contigous_array, ptr, count); // create the output array npy_intp dst_dim[1]; dst_dim[0] = count; PyObject* out_matrix = PyArray_SimpleNew(1, dst_dim, NPY_FLOAT64); double* ptr_out; PyArrayObject* output_contigous_array; reference_contiguous_array(out_matrix, output_contigous_array, ptr_out, count); for (int i = 0; i < count; i++) { ptr_out[i] = ptr[i] * ptr[i]; } dereference((PyObject*)input_contigous_array); dereference((PyObject*)output_contigous_array); return out_matrix; } BOOST_PYTHON_MODULE(_func) { import_array(); bp::def(square_matrix, entry_square_matrix); }
记录numpy和c++的混合编程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。