gpt4 book ai didi

python - scipy 和 numpy 规范之间的性能差异

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:51 25 4
gpt4 key购买 nike

我一直假设 scipy.linalg.norm()numpy.linalg.norm() 是等价的(scipy 版本过去不接受轴参数,但现在确实如此)。然而,以下简单示例会产生截然不同的性能:这背后的原因是什么?

In [1]: from scipy.linalg import norm as normsp
In [2]: from numpy.linalg import norm as normnp
In [3]: import numpy as np
In [4]: a = np.random.random(size=(1000, 2000))

In [5]: %timeit normsp(a)
The slowest run took 5.69 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 2.85 ms per loop

In [6]: %timeit normnp(a)
The slowest run took 6.39 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 558 µs per loop

scipy版本是0.18.1,numpy是1.11.1

最佳答案

寻找 source code显示 scipy 有它自己的 norm 函数,它环绕着 numpy.linalg.norm 或一个速度较慢但处理 float 的 BLAS 函数溢出更好(参见关于此 PR 的讨论)。

但是,在您提供的示例中,SciPy 似乎没有使用 BLAS 函数,因此我认为它不会对您看到的时差负责。但是 scipy 在调用 norm 的 numpy 版本之前确实做了一些其他检查。特别是,无限检查 a = np.asarray_chkfinite(a) 可能会导致性能差异:

In [103]: %timeit normsp(a)
100 loops, best of 3: 5.1 ms per loop

In [104]: %timeit normnp(a)
1000 loops, best of 3: 744 µs per loop

In [105]: %timeit np.asarray_chkfinite(a)
100 loops, best of 3: 4.13 ms per loop

所以看起来 np.asarray_chkfinite 大致说明了评估规范所花费的时间差异。

关于python - scipy 和 numpy 规范之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40153301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com