准备记录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);
}

  

最新文章

  1. C# windows服务制作(包括安装及卸载)
  2. 【转载】如何用IntelliJ IDEA 14 创建Web项目
  3. Linux上安装五笔
  4. Gmail 账号找回办法
  5. [poj 3691]DNA repair
  6. JSBinding + SharpKit / 生成JavaScript绑定
  7. C#生成DBF文件
  8. 关于Django模板引擎的研究
  9. Office Add-in 架构和入门
  10. Nginx使用图片处理模块
  11. udp重发
  12. VLAN之间通信-三层交换
  13. Maven打包编译找不到com.sun.crypto.provider.SunJCE类
  14. Delphi自写组件:可设置颜色的按钮
  15. python之WSGI与Guincorn
  16. [转]Hive开发总结
  17. python类中保存非绑定方法作为成员函数
  18. MySQL笔记(六)游标练习
  19. 【转载】基于MFC的ActiveX控件开发(1)
  20. 作业6 团队项目之(开始第一个Sprint)

热门文章

  1. https 多路复用的理解~转载
  2. perl6中的替换
  3. document.onclick在ios上不触发的解决方法与touchstart点击穿透处理
  4. Linux 入门记录:十九、Linux 包管理工具 RPM
  5. 解决Mac开机变慢 command +option + P + R
  6. python_迭代器和生成器
  7. Mac安装Maven
  8. Foxmail 登录 qq 账号时无法登录 提示我们设置了独立密码或使用授权码登录的解决方法
  9. 洛谷 P3919 【模板】可持久化数组(可持久化线段树/平衡树)-可持久化线段树(单点更新,单点查询)
  10. hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)