代码之家  ›  专栏  ›  技术社区  ›  fish2000

Python数学性能:`数学。sqrt(square)`vs.square**0.5`,vs.其他方法[重复]

  •  0
  • fish2000  · 技术社区  · 6 年前

    相比之下 math.sqrt(…) 对于内置的二进制运算符, … ** 0.5 在REPL中使用 timeit.timeit(…) ,看起来二进制op比 math 模块功能:

    enter image description here

    尽管我必须将迭代次数增加到1000000次才能获得明显的差异(注意,我确实通过直接导入来补偿模块函数查找开销) sqrt 从…起 数学 在相关测试中)。

    在这种情况下,我还没有深入检查更明显的现成优化代码路径,例如调用 libm 通过扩展或 cython 模块——当我努力坚持我的新年决心时,不要过早地每周优化一次以上; unlike other related-question-askers ,Im在整数结果正确后执行。

    这是当前同步图像处理功能的热循环操作,该功能使用PIL/Pillow render an image as a monotone dot-screen halftone ‡ ,目前速度太慢了大约两个数量级;这不容易 cythion -化或 numpy -由于目前正在使用Pillows矢量绘图API(但仅供参考,我不怕与问题的这些元素保持距离;例如,我已经替换了对Pillows的调用) ImageStat.Stat 包装 faster and less overhead-y bespoke functions ,这是一个可以证明的,完全不是过早的优化行为)。

    我的问题是:这两种方法(和/或我没有提到的任何其他平方根方法)在一般意义上以及那些与Python数学环境密切相关的方法的重要优点和缺点是什么?更重要的是,这些问题是否被其他问题所掩盖,比如前面提到的开销问题,比如属性查找、函数调度等等?

    我经常发现,作为一个单元,每个元素都有简单的性能答案,但是当Python代码需要满足性能标准时,所有这些次要问题都会在误解的灰色地带出现,因此,我特别希望能听到任何曾处理过此类问题并了解应该认真对待的人的意见。


    半色调代码本身起源于 this excellent and time-tested SO answer .

    0 回复  |  直到 6 年前