Juliaで部分配列を迅速に参照する方法
概要
Juliaで、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
