gpt4 book ai didi

c++ - 使用 C++(和 GSL)扩展和嵌入 Python(和 NumPy): pass gsl_matrix to python and back

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:08 27 4
gpt4 key购买 nike

我的问题“应该”很简单,但我仍然无法解决。

我目前从事的项目需要一些繁重的计算(用 C++ 完成)和一些模拟后数据分析(用 Python 完成)。

但是,现在我正在更改主要算法,我将需要在 C++ 和 Python 之间来回“循环”一些计算。也就是说,我需要在 C++ 和 Python 之间来回移动一个 double 矩阵。

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

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

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

我一直在阅读(并尝试了 10 天)SWIG、Cython、Boost.Python 和 Boost.Numpy,但我仍然无法破解它。

有没有人可以分享一个有效的例子?

谢谢!

雷内

最佳答案

我认为你不需要自己实现包装器,因为你可以使用 pygsl .如果你真的想实现你自己的版本,这里是 pygsl 的例程,可能对你有值(value)

%{
#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;
}
%}

关于c++ - 使用 C++(和 GSL)扩展和嵌入 Python(和 NumPy): pass gsl_matrix to python and back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18748836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com