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

      

  • 相关阅读:
    hdu 1166 敌军布阵
    UVA 100
    dfs和bfs 变形课
    hdu 1002 A + B Problem II
    连连看 杭电1175
    跳格子 DFS 加 奇偶截枝
    c语言 判断两直线段是否相交
    poj 3067 Japan
    数状数组
    UVA 10881 Piotr's Ants
  • 原文地址:https://www.cnblogs.com/Key-Ky/p/6344614.html
Copyright © 2020-2023  润新知