行列Rの値に従って、行列Mの要素を配列dに合計したいと思います。
理論的には、1 つの配列 (D) に合計するアクションには同じデータへのメモリ アクセスが必要なため、シリアル化できません。
私は次の方法でそれを実装しました
for ind = 1: numel(R)
d(R(ind)) = d(R(ind)) + M(ind);
end
@Andrew がこの関連トピックで提案したように: How do I iterate through each element in a n-dimensional matrix in MATLAB?
配列 R の要素はすべて大きいわけではありませんが、1 または 2 ではなく、たとえば 1 から 15 の場合もあります。
アクションの「理論的な複雑さ」が悪化したとしても、Matlabでそれを行うより効率的な方法はありますか?
R の可能な値を反復処理し、 R = val のインデックスで M の要素を合計することによっても解決できるため、一般的に言えばループが「好き」ではない、Matlab の「組み込み」以上のもの。
たとえばSQLでは、1つの列の繰り返しを折りたたんで、他の列の値の合計を取得する「組み込み」メソッドがあります。
同様のアクションについてのトピックがありますが、言語が異なります: マトリックスを折りたたんで、ある列の値を別の列の値で合計します