信じられないかもしれませんが、現在のコードをプロファイリングしたところ、numpy 配列の逆戻りの繰り返し操作が実行時間の大部分を消費していました。現在使用しているのは、一般的なビューベースの方法です。
reversed_arr = arr[::-1]
もっと効率的に行う方法は他にあるのでしょうか、それとも非現実的な NumPy のパフォーマンスに対する私の執着から生まれた単なる錯覚なのでしょうか?
ベストアンサー1
reversed_arr = arr[::-1]
逆のビューを元の配列 にコピーしますarr
。元の配列に加えられた変更もarr
に直ちに表示されます。とreversed_arr
の基礎となるデータ バッファは共有されるため、このビューの作成は常に瞬時に行われ、追加のメモリ割り当てや配列の内容のコピーは必要ありません。arr
reversed_arr
NumPy ビューに関する次のディスカッションも参照してください。NumPy 配列にビューを作成するにはどうすればよいですか?
ビューに関するパフォーマンスの問題に対する可能な解決策
必要以上に頻繁にビューを再作成していませんか? 次のような操作を実行できるはずです。
arr = np.array(some_sequence)
reversed_arr = arr[::-1]
do_something(arr)
look_at(reversed_arr)
do_something_else(arr)
look_at(reversed_arr)
私は NumPy の専門家ではありませんが、これは NumPy で物事を実行する最も速い方法のように思えます。これがすでに行われていることであれば、改善することはできないと思います。