use*_*r89 3 python numpy cython
如果我正在使用类型化的内存视图,并且我想添加两个我使用这样的内存视图表示的向量,或者使用它们的点积或其他类似的向量,Cython是否希望我自己实现这些函数?
我对此没有任何问题,但是我想知道如果我正忙于编写添加矢量/乘以标量/点积等等,我是否做错了.靠我自己 感觉就像反模式,但我不确定.
什么是正确的模式?
如果您的代码在线性代数函数或向量化操作中花费了大量时间,那么它可能不是Cythonizing的非常好的候选者.
numpy数组之间的点产品通常使用已经非常高度优化的BLAS库调用来执行,如果你尝试在Cython*中重新发明轮子,你几乎可以保证做得更差.类似地,基本的向量化操作(例如添加两个向量)对于numpy数组已经非常有效,尽管在某些情况下可能在Cython中做得更好(例如通过利用并行化,或通过避免中间数组分配).
Cython对于加速无法轻易矢量化的操作非常有用,否则你将不得不求助于Python for循环等.最好的方法通常是识别和Cython化这些瓶颈,而不是试图重写所有内容用Cython.
*话虽如此,通过将指针传递给数组中的第一个元素,可以直接在类型化的内存视图上调用BLAS或LAPACK函数(有关示例,请参见此处和此处).