【发布时间】:2013-09-11 18:40:01
【问题描述】:
我的问题“应该”很简单,但我仍然无法解决。
我目前正在从事一个需要大量计算(用 C++ 完成)和一些后期模拟数据分析(用 Python 完成)的项目。
但是,现在我正在更改主要算法,我需要在 C++ 和 Python 中来回“循环”一些计算。 也就是说,我需要在 C++ 和 Python 中来回移动一个双精度矩阵。
在 C++ 中,数据矩阵是“gsl_matrix”对象,而在 python 中,相同的矩阵被实现为“numpy 数组”。
目前,我正在运行我的 C++ 代码,将矩阵保存到文件,从 python 读取它,将其写回文件,然后在 C++ 中再次打开它以进行进一步计算。
由于这是非常低效的,我想问一下是否有人可以给我一个关于如何以“干净”方式做到这一点的例子。
我一直在阅读(并尝试了 10 天)SWIG、Cython、Boost.Python 和 Boost.Numpy,但我仍然无法破解它。
有人可以分享一个有效的例子吗?
谢谢!
雷内
【问题讨论】:
-
您如何看待事情的发展?使用
PyArray_SimpleNewFromData将gsl_matrixstruct指针转换为PyArrayObject指针似乎很简单,但如何处理它周围的一切很大程度上取决于您希望事情发生什么/如何发生。 -
好吧,我们的想法是让一些东西活起来:“ import numpy as np import MYCPP as mycpp DATA = np.loadtxt(...) # 这里的 DATA 是一个 TxN 矩阵 out = mycpp. run(DATA, params) # 这里的 out 将是一个 Nx1 向量 " 在 C++ 中,DATA 需要是一个 gsl_matrix 才能工作,并且从 C++ 代码返回的 "out" 向量将是一个 gsl_vector