记录numpy和c++的混合编程
2024-09-29 02:15:48
准备记录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);
}
最新文章
- C# windows服务制作(包括安装及卸载)
- 【转载】如何用IntelliJ IDEA 14 创建Web项目
- Linux上安装五笔
- Gmail 账号找回办法
- [poj 3691]DNA repair
- JSBinding + SharpKit / 生成JavaScript绑定
- C#生成DBF文件
- 关于Django模板引擎的研究
- Office Add-in 架构和入门
- Nginx使用图片处理模块
- udp重发
- VLAN之间通信-三层交换
- Maven打包编译找不到com.sun.crypto.provider.SunJCE类
- Delphi自写组件:可设置颜色的按钮
- python之WSGI与Guincorn
- [转]Hive开发总结
- python类中保存非绑定方法作为成员函数
- MySQL笔记(六)游标练习
- 【转载】基于MFC的ActiveX控件开发(1)
- 作业6 团队项目之(开始第一个Sprint)
热门文章
- https 多路复用的理解~转载
- perl6中的替换
- document.onclick在ios上不触发的解决方法与touchstart点击穿透处理
- Linux 入门记录:十九、Linux 包管理工具 RPM
- 解决Mac开机变慢 command +option + P + R
- python_迭代器和生成器
- Mac安装Maven
- Foxmail 登录 qq 账号时无法登录 提示我们设置了独立密码或使用授权码登录的解决方法
- 洛谷 P3919 【模板】可持久化数组(可持久化线段树/平衡树)-可持久化线段树(单点更新,单点查询)
- hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)