f2py
純粋な Python で実行するのは非常に面倒な計算量が多いため、速度を上げるためにfortran ( ) でいくつかのコードを書いています。
Python で NumPy 配列を設定order=Fortran
すると、従来の C スタイルの順序に関してメインの Python コードが遅くなるかどうか疑問に思っていました。
f2py
純粋な Python で実行するのは非常に面倒な計算量が多いため、速度を上げるためにfortran ( ) でいくつかのコードを書いています。
Python で NumPy 配列を設定order=Fortran
すると、従来の C スタイルの順序に関してメインの Python コードが遅くなるかどうか疑問に思っていました。
順番によって計算速度が大きく変わります。以下に簡単な例を示します。
In [15]: x = np.ones((1000, 1000))
In [16]: y = np.ones((1000, 1000), order='F')
In [17]: %timeit x.sum(axis=0)
100 loops, best of 3: 8.03 ms per loop
In [18]: %timeit y.sum(axis=0)
1000 loops, best of 3: 1.02 ms per loop
この例では、C 順序配列の列を合計すると、Fortran 順序配列でそれらを合計する場合の 8 倍の時間がかかります。合計が他の軸で実行される場合、C 順序付けられた配列での計算はより高速です。
In [19]: %timeit x.sum(axis=1)
1000 loops, best of 3: 1.02 ms per loop
In [20]: %timeit y.sum(axis=1)
100 loops, best of 3: 8.09 ms per loop
したがって、Fortran 順序付き配列を使用することが Python コードのパフォーマンスに影響を与えるかどうかの答えは、「おそらく」です。
スローダウンがあってはなりません。NumPy 1.6 以降、ほとんど(つまりufuncs
、基本的な「ユニバーサル」関数) はオプションの引数を取り、ユーザーが配列のメモリ レイアウトを指定できるようにしています。K
できるだけ近い」。
そのため、ボンネットの下ですべてを処理する必要があります。
order
最悪の場合、 のパラメーターを使用して、ある注文から別の注文にいつでも切り替えることができますnp.array
(ただし、データがコピーされるため、おそらく価値はありません)。