ジュリアで部分配列を迅速に参照する方法
概要
ジュリアで、view
は配列のサブアレイを素早く参照させるデータ構造だ。実際に使う立場から見れば面倒で差がないように見えるけど、怠惰に参照されてもっと軽い配列を返す。だから、基本的なレベルで最適化されたジュリアのコードでは、@views
というマクロを簡単に見つけることができる。
コード
行列M
のサブマトリックスを参照してみよう。
関数形式:view()
view(A, inds...)
A
のinds...
に従ったview
を返す。
しかし、この形式は一般的にコードを読みにくくするため、好まれない。次のマクロを使用すると、view
を使用しながらも基本的なジュリアの文法と大きな違いはない。
マクロ:@view
@view
マクロは、サブアレイを参照する文脈のコードにview
が適用されたかのように替えるマクロだ。
ブロック全体に適用:@views
@views
マクロは、続くブロック全体に@view
を適用する。これのおかげで、view
なしで快適に書いた関数の前に@views f(x) ... end
と@views
だけを付ければ、自動的にview
が適用される。
全体のコード
速度比較
fcopy()
とfview()
は、まったく同じ機能を持つ関数だが、速度に違いがある。一見、速度は似ているように見えるが、ほとんどがコンパイル時間だ。これを除いて、単純な実行時間だけを比較すると、約4倍の差がある。
環境
- OS: Windows
- julia: v1.7.0