【发布时间】:2015-05-14 18:26:59
【问题描述】:
我目前正在使用 boost/python 在我的 C++ 程序中嵌入 Python,以便使用 matplotlib。现在我被困在一个必须构建大型数据结构的地方,比如说一个密集的 10000x10000 双精度矩阵。我想绘制该矩阵的列,我想我有多种选择:
- 迭代每个值并将其复制到一个 numpy 数组中 --> 我不想这样做,原因很明显,内存消耗加倍
- 迭代每个值并将其导出到文件中而不是在 python 中导入它 --> 我可以完全不使用 boost/python 来做到这一点,我认为这不是一个好方法
- 在 Python 中分配和存储矩阵并仅从 C++ 更新值 --> 但正如 here 所述,在 Python 解释器和我的 C++ 程序之间来回切换并不是一个好主意
- 以某种方式将矩阵暴露给 python 而不必复制它 --> 我能找到的关于这件事的所有内容都是关于 extending Python with C++ classes 而不是 embedding
在性能和内存消耗方面,哪一个是最佳选择,或者有更好的方法来完成此类任务。
【问题讨论】:
-
5) 编写一些额外的代码以仅提取要绘制的列并将(小得多的)相关数据返回给 Python 进行绘制。
-
从对象生命周期和所有权的角度来看,Boost.Python 没有区分扩展和嵌入。