扩展和Embed Python(和NUMPY)与C++(和GSL):传递GSLYL矩阵到Python和B

2024-04-18 17:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题“应该”很简单,但我还是解决不了。在

我目前正在做一个项目,需要一些繁重的计算(C++中的)和一些后模拟数据分析(用Python完成)。在

但是,现在我正在改变主算法,我需要从C++和Python来回循环计算。 也就是说,我需要从C++和Python来回移动一个双倍矩阵。在

在C++中,数据矩阵是一个“GSLL矩阵”对象,而在Python中,同样的矩阵被实现为“NUMPY数组”。在

目前,我正在运行C++代码,将矩阵保存到文件中,从Python读取它,然后将其写入文件,然后在C++中再次打开它进行进一步的计算。在

因为这是非常低效的,我想问是否有人可以给我一个例子,如何做到“干净”的方式。在

我已经读了10天了,辛顿,Boost.Python以及加油,纽比但我还是无法破解它。在

有没有人可以分享一个成功的例子?在

谢谢!在

雷内


Tags: 文件数据项目对象代码numpy算法方式
1条回答
网友
1楼 · 发布于 2024-04-18 17:35:01

我认为您不需要自己实现包装器,因为您可以使用pygsl。如果您真的想实现自己的版本,下面是pygsl的例程,它可能对您很有价值

%{
#include <gsl/gsl_matrix_double.h>
#include <gsl/gsl_matrix_complex_double.h>
%}

%include typemaps.i

// gsl_matrix typemaps
%typemap(in) gsl_matrix* %{
  PyArrayObject *_PyMatrix$argnum;
  gsl_matrix_view matrix$argnum;
  {
    _PyMatrix$argnum = (PyArrayObject*)
      PyArray_ContiguousFromObject($input, PyArray_DOUBLE, 2, 2);
    if (_PyMatrix$argnum == NULL)
      return NULL;
    matrix$argnum
      = gsl_matrix_view_array((double*)_PyMatrix$argnum->data,
                  _PyMatrix$argnum->dimensions[0],
                  _PyMatrix$argnum->dimensions[1]);    
    $1 = &matrix$argnum.matrix;
  }
%}

相关问题 更多 >