ndarrayは後ろに置け
numpyでの高速化についてです。
np.arange(n) * a1 * a2 * a3 * a4
より
a1 * a2 * a3 * a4 * np.arange(n)
の方が速いです。
正弦波合成の式にtimeitで処理時間を計測すると、
import math import numpy as np n = 10**7 fs = 440 smp = 44100 %timeit -n 10 np.arange(n) * 2 * math.pi * fs / smp %timeit -n 10 2 * math.pi * fs / smp * np.arange(n)
10 loops, best of 3: 241 ms per loop 10 loops, best of 3: 89.7 ms per loop
上の式だと計算量が「ndarrayの要素数 × 他の変数の数」になり、
下の式だと「(他の変数の数 - 1) + ndrarrayの要素数」になっていそうです。
ndarrayの要素数を n 、他の変数の数を m とすると、
n * m と n + (m - 1) では、だいぶ変わります。
ですので、ndarrayを後ろに置く下の式のタイプか、
他の変数を先に計算しておくのをおすすめします。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る