私はいつもscipy.linalg.norm()
とnumpy.linalg.norm()
を同等とみなしています(軸の引数を受け入れないscipyのバージョンですが、現在はそうしています)。しかし、以下の簡単な例は、パフォーマンスが大きく異なる結果をもたらします。その背後にある理由は何ですか?scipyとnumpy normのパフォーマンスの差
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のはsource codeがscipy
が遅いですが、フローティング扱うnumpy.linalg.norm
またはBLAS関数をラップ独自のnorm
機能を有していることが明らかになった探し1.11.1