15

「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
4

1 に答える 1