質問: 行列の操作において、行方向優先と列方向優先のどちらが速いですか? コロンを使用して以下のような行列の操作をしています。 a(i, :) ループ内で行列 a内のi番目の行のデータを集めているのですが、ループの回数を増やした際にさらに高速に処理をしたいと思います。
回答: 2次元またはそれ以上の行列の操作を行う場合、一般的には列方向で行列の要素にアクセスするほうが高速です。 これは、一般的なpcでは例えば行列データの参照など、メモリアクセスの際には高速化のためにキャッシュを使用していますが、matlabでは行列データを列方向でメモリにストアするため、列方向で行列の要素にアクセスするほうが、キャッシュの効果を得ることができるためです。 以下のurlの「store and access data in columns」の部分もご参考ください。 一般的なpc環境ではcode segment 2のスクリプトのほうが速くなります。これは、内側のfor文で、rを単調増加させる方向(列方向でのアクセス)になっているためです。