似乎numpy并不是超快计算的最理想选择。有人知道在使用numpy进行数值计算时需要注意哪些开销吗?
发布于 2010-04-29 00:15:11
嗯,这取决于你想做什么。例如,XOR对于对数值线性代数感兴趣的人来说几乎没有意义(由于使用了底层优化的BLAS/LAPACK库,numpy对于数值线性代数来说相当快)。
一般来说,从numpy获得良好性能背后的大想法是一次在许多元素上摊销解释器的成本。换句话说,将循环从python代码(慢)移到numpy/BLAS/LAPACK/etc.内部某处的C/Fortran循环(快)。如果您成功地完成了该操作(称为矢量化),性能通常会很好。
当然,您显然可以通过转储python解释器并使用C++来获得更好的性能。这种方法是否真正成功取决于您在使用C++与numpy进行高性能编程方面有多好,以及您到底要做什么操作。
发布于 2010-05-12 23:56:07
任何时候,只要有一个像x = a * b + c / d + e这样的表达式,您就会得到一个用于a * b的临时数组,一个用于c / d的临时数组,一个用于其中一个和的临时数组,最后一个用于结果的分配。这是Python类型和运算符重载的限制。但是,您可以使用增强赋值(*=、+=等)显式地就地执行操作。运算符,并确保不会复制。
至于NumPy在基准测试中运行缓慢的具体原因,很难说,但它可能与检查大小、类型封送等的持续开销有关,而Cython/等不必担心。在更大的问题上,你可能会看到它变得越来越近。
发布于 2010-04-29 10:30:03
我真的不知道,但我猜有两个因素:
https://stackoverflow.com/questions/2731157
复制相似问题