1

f2py純粋な Python で実行するのは非常に面倒な計算量が多いため、速度を上げるためにfortran ( ) でいくつかのコードを書いています。

Python で NumPy 配列を設定order=Fortranすると、従来の C スタイルの順序に関してメインの Python コードが遅くなるかどうか疑問に思っていました。

4

2 に答える 2

3

順番によって計算速度が大きく変わります。以下に簡単な例を示します。

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 コードのパフォーマンスに影響を与えるかどうかの答えは、「おそらく」です。

于 2012-09-26T22:06:41.243 に答える
1

スローダウンがあってはなりません。NumPy 1.6 以降、ほとんど(つまりufuncs、基本的な「ユニバーサル」関数) はオプションの引数を取り、ユーザーが配列のメモリ レイアウトを指定できるようにしています。Kできるだけ近い」。

そのため、ボンネットの下ですべてを処理する必要があります。

order最悪の場合、 のパラメーターを使用して、ある注文から別の注文にいつでも切り替えることができますnp.array(ただし、データがコピーされるため、おそらく価値はありません)。

于 2012-09-26T16:56:25.820 に答える