首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么numpy本身是“慢”的?

为什么numpy本身是“慢”的?
EN

Stack Overflow用户
提问于 2010-04-29 00:03:47
回答 4查看 3.5K关注 0票数 6

给定thread here

似乎numpy并不是超快计算的最理想选择。有人知道在使用numpy进行数值计算时需要注意哪些开销吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-29 00:15:11

嗯,这取决于你想做什么。例如,XOR对于对数值线性代数感兴趣的人来说几乎没有意义(由于使用了底层优化的BLAS/LAPACK库,numpy对于数值线性代数来说相当快)。

一般来说,从numpy获得良好性能背后的大想法是一次在许多元素上摊销解释器的成本。换句话说,将循环从python代码(慢)移到numpy/BLAS/LAPACK/etc.内部某处的C/Fortran循环(快)。如果您成功地完成了该操作(称为矢量化),性能通常会很好。

当然,您显然可以通过转储python解释器并使用C++来获得更好的性能。这种方法是否真正成功取决于您在使用C++与numpy进行高性能编程方面有多好,以及您到底要做什么操作。

票数 12
EN

Stack Overflow用户

发布于 2010-05-12 23:56:07

任何时候,只要有一个像x = a * b + c / d + e这样的表达式,您就会得到一个用于a * b的临时数组,一个用于c / d的临时数组,一个用于其中一个和的临时数组,最后一个用于结果的分配。这是Python类型和运算符重载的限制。但是,您可以使用增强赋值(*=+=等)显式地就地执行操作。运算符,并确保不会复制。

至于NumPy在基准测试中运行缓慢的具体原因,很难说,但它可能与检查大小、类型封送等的持续开销有关,而Cython/等不必担心。在更大的问题上,你可能会看到它变得越来越近。

票数 1
EN

Stack Overflow用户

发布于 2010-04-29 10:30:03

我真的不知道,但我猜有两个因素:

  1. 也许numpy正在复制更多的东西?当你避免分配大的临时数组时,weave通常会更快一些,但这在这里并不重要。
  2. numpy在迭代(可能)多维数组时使用了一些开销。这种开销通常会与数字运算相比相形见绌,但xor真的很快,所以真正重要的是开销。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2731157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档