はい、これにはブロードキャストを使用できます (3.6.0 以降が必要です)。あなたがpythonを知っているなら、これは同じです(pythonからの説明)。行列に列を掛けるだけです。最後に足し算を行いますが、必要なcumsum
のは最後の行だけです。
newx = X .* y;
myscalars = cumsum (newx, 1) (end,:);
または一時変数なしで1行で
myscalars = cumsum (X .* y, 1) (end,:);
サイズが合っていれば、自動的にブロードキャストが行われます。例えば:
octave> a = [ 1 2 3
1 2 3
1 2 3];
octave> b = [ 1 0 2];
octave> a .* b'
warning: product: automatic broadcasting operation applied
ans =
1 0 6
1 0 6
1 0 6
octave> a .* b
warning: product: automatic broadcasting operation applied
ans =
1 2 3
0 0 0
2 4 6
警告の理由は、ユーザーを混乱させる可能性のある新しい機能であり、Matlab には存在しないためです。ファイルに追加warning ("off", "Octave:broadcast")
することで、永久にオフにすることができます.octaverc
古いバージョンの Octave を使用している場合は、bsxfun
直接呼び出すことで同じことができます。
myscalars = cumsum (bsxfun (@times, X, y), 1) (end,:);