n 次元の巨大な numpy 配列の軸に沿って np.std、np.sum などの関数を高速化するには、最後の軸に沿って適用することをお勧めします。
するとnp.transposeして操作したい軸を最後の軸まで回転させます。本当にメモリ内のデータを再シャッフルしているのか、それとも軸のアドレス指定方法を変更しているだけなのか?
%timeit を使用して時間を測定しようとしたとき。この転置をマイクロ秒単位で行っていました (私が持っていた (112x1024x1024) 配列をコピーするのに必要な時間よりもはるかに短い.
実際にメモリ内のデータを並べ替えておらず、アドレス指定のみを変更している場合、新しく回転した最後の軸に適用すると、np.sum または np.std が高速化されますか?
測ってみたところ、速度が速くなったようです。しかし、私は方法を理解していません。
アップデート
転置で実際にスピードアップするようには見えません。最速の軸は、C オーダーの場合は最後の軸であり、Fortran オーダーの場合は最初の軸です。したがって、np.sum または np.std を適用する前に転置しても意味がありません。私の特定のコードでは、配列の作成中に order='FORTRAN' を指定して問題を解決しました。これにより、最初の軸が最速になりました。
すべての答えをありがとう。