通过使用BLA和LAPACK,我想通过编写C或C++中的一些模块来扩展Python和NoMpy.我还希望能够将代码作为独立的C/C++库分发.我希望这个库同时使用单精度和双精度浮点.我将写的函数的一些例子是求解线性系统的共轭梯度法或加速一阶方法.有些函数需要从C/C++代码中调用Python函数.

在try 了一下Python/C API和Numpy/C API之后,我发现很多人主张改用Cython(例如参见this questionthis one).我不是Cython方面的专家,但似乎对于some cases,您仍然需要使用Numpy/C API并了解它的工作原理.鉴于我已经对Python/C API有(一些)了解,而对Cython一无所知,我想知道继续使用Python/C API是否有意义,以及使用此API是否比Cython有一些优势.将来我一定会开发一些不涉及数值计算的东西,所以这个问题不仅仅是关于麻木的.我喜欢Python/C API的一点是,我了解了一些有关Python解释器如何工作的知识.

谢谢

推荐答案

首先,你的问题有一点我不明白:

[.]我还希望能够将代码作为独立的C/C++库分发.[.]有些函数需要从C/C++代码调用Python函数.

这是怎么回事?

接下来,关于您的实际问题,直接使用Python/C API当然有好处:

  • 最有可能的是,您对编写C代码比编写Cython代码更熟悉.

  • 用C语言编写代码可以最大限度地控制代码.要从Cython代码中获得与等效C代码相同的性能,必须非常小心.您不仅需要确保声明所有变量的类型,还需要充分设置一些标志——一个例子是bounds checking.你需要深入了解Cython如何工作才能获得最佳性能.

  • Cython代码依赖于Python.在Cython中编写也应该作为独立C库分发的代码似乎不是一个好主意

C++相关问答推荐

Mise()在虚拟内存中做什么?

不同到达时间的轮询实现

va_copy的使用是未定义的行为吗?

括号中的堆栈实现错误问题

在移动数组元素时获得意外输出

错误...的多个定义(&Q)首先在这里定义&

-Wnonnull-Compare警告不是具有误导性吗?

Fprintf正在写入多个 struct 成员,并且数据过剩

具有正确标头的C struct 定义问题

C23标准是否向后兼容?

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

C中的char**v*char[]

Linux/C:带有子进程的进程在添加waitid后都挂起

程序如何解释变量中的值

try 判断长整数是否为素数

如何打印循环调度问题的时间表

与指针的原始C数组或C++向量<;向量<;双>>;

'printf("%s", user_input)' 危险吗?

cs50拼写器分配中的无限循环

char* 上的 free() 被 valgrind 识别为无效