【发布时间】:2013-09-13 07:23:34
【问题描述】:
我正在尝试将我在C++ 代码中生成的双精度向量传递给python numpy 数组。我希望在Python 中进行一些下游处理,并希望在填充 numpy 数组后使用一些 python 工具。我想做的最重要的事情之一就是能够绘制事物,而 C++ 在这方面有点笨拙。我还希望能够利用 Python 的统计能力。
虽然我不太清楚该怎么做。我花了很多时间浏览 Python C API 文档。我遇到了一个显然可以解决问题的函数 PyArray_SimpleNewFromData。就代码的整体设置而言,我仍然不清楚。我正在构建一些非常简单的测试用例来帮助我理解这个过程。我在 Visual Studio express 2012 中生成了以下代码作为独立的 Empty 项目。我将此文件称为 Project1
#include <Python.h>
#include "C:/Python27/Lib/site-packages/numpy/core/include/numpy/arrayobject.h"
PyObject * testCreatArray()
{
float fArray[5] = {0,1,2,3,4};
npy_intp m = 5;
PyObject * c = PyArray_SimpleNewFromData(1,&m,PyArray_FLOAT,fArray);
return c;
}
我的目标是能够在 Python 中读取 PyObject。我被卡住了,因为我不知道如何在 Python 中引用这个模块。特别是如何从 Python 导入此项目,我尝试从 python 中的项目路径导入 Project1,但失败了。一旦我理解了这个基本情况,我的目标就是想办法将我在 main 函数中计算的向量容器传递给 Python。我也不知道该怎么做。
任何可以帮助我的专家,或者发布一个包含一些代码的简单示例,该示例从一个简单的 c++ 向量读取并填充一个 numpy 数组,我将不胜感激。非常感谢。
【问题讨论】:
-
它并不太复杂,因为它主要需要大量样板代码。您需要在 C 中定义一个新的 Python 模块,并向它注册一个新的 Python 方法,同样在 C 中,它将调用您的上述函数。 Python 文档中的 Extending Python with C or C++ 指南是一个很好的起点。
-
非常感谢,如果您能发布一个简单的自包含示例,我将不胜感激。我会帮我很多。谢谢。
-
我找到了this related question that may help you out,但最直接的方法可能是使用 Cython...