【发布时间】:2011-08-08 21:09:55
【问题描述】:
我想通过使用 BLAS 和 LAPACK 用 C 或 C++ 编写一些模块来扩展 python 和 numpy。我还希望能够将代码作为独立的 C/C++ 库分发。我希望这个库同时使用单精度和双精度浮点数。我将编写的一些函数示例是用于求解线性系统的共轭梯度或加速的一阶方法。有些函数需要从 C/C++ 代码中调用 Python 函数。
在玩了一点 Python/C API 和 Numpy/C API 之后,我发现很多人提倡使用 Cython(例如,参见 this question 或 this one)。我不是 Cython 方面的专家,但似乎对于 some cases,您仍然需要使用 Numpy/C API 并知道它是如何工作的。鉴于我已经对 Python/C API 有(一些)知识,而对 Cython 一无所知,我想知道继续使用 Python/C API 是否有意义,以及使用这个 API 是否比 Cython 有一些优势.以后我肯定会开发一些不涉及数值计算的东西,所以这个问题不仅仅是关于numpy的。我喜欢 Python/C API 的一件事是我了解了一些有关 Python 解释器工作原理的知识。
谢谢。
【问题讨论】:
-
如果我没记错的话,BLAS 和 LAPACK 已经集成在 scipy 中了
-
注意:您为 some cases 提供的链接指向使用来自 Cython 而非 C 的 Numpy/C API 的代码。
-
@fabrizioM:是的,BLAS 和 LAPACK 用于 numpy 和 scipy。但是我想开发既不是 numpy 也不是 scipy 的数值算法,出于效率原因,我想在 C/C++ 中进行。
-
@J.F.塞巴斯蒂安:是的。我的观点是,这段代码非常接近使用 Numpy/C API 编写的 C 代码:必须知道底层行为(如引用计数)。