「numpyでforループを避ける」をたくさん読んだことがあります。それで、私は試しました。このコード(簡易版)を使用していました。いくつかの補助データ:
In[1]: import numpy as np
resolution = 1000 # this parameter varies
tim = np.linspace(-np.pi, np.pi, resolution)
prec = np.arange(1, resolution + 1)
prec = 2 * prec - 1
values = np.zeros_like(tim)
私の最初の実装はfor
ループでした:
In[2]: for i, ti in enumerate(tim):
values[i] = np.sum(np.sin(prec * ti))
for
次に、明示的なサイクルを取り除き、これを達成しました。
In[3]: values = np.sum(np.sin(tim[:, np.newaxis] * prec), axis=1)
そして、このソリューションは小さな配列ではより高速でしたが、スケールアップすると、次のような時間依存性が得られました。
私が見逃しているものは何ですか、それとも正常な動作ですか? そうでない場合は、どこを掘るのですか?
編集:コメントによると、ここにいくつかの追加情報があります。時間は IPython%timeit
とで測定され%%timeit
、すべての実行は新しいカーネルで実行されました。私のラップトップはacer aspire v7-482pg (i7, 8GB)です。私は使用しています:
- パイソン3.5.2
- numpy 1.11.2 + mkl
- ウィンドウズ10