0

行列 A があり、次を取得したいとします。

for i=1:m
  A(i,:) = something which depends on i;
endfor

ループなしでそれを取得する方法はありますか?

追加:わかりました、もっと具体的にしなければならないことは理解しました。
私は2つの行列を持ってBいますC(検討しているすべての行列にはm行があります)。andの- 番目の行に記述された多項式の積の- 番目の行
に記録したい(そのため、ループを使用して conv 関数を呼び出します)。何か案は?iAiBC

4

2 に答える 2

0

これは非常に一般的な質問であり、詳細についてはお答えできません。主に何iに関与するかについて。次のように仮定します

for i = 1:m
  A(i,:) += i;
endfor

これは、はるかに効率的な次のように記述できます。

A .+ (1:m)'

比較してください:

octave> n = 1000;
octave> A = B = rand (n);
octave> tic; for i = 1:n, B(i,:) += i; endfor; toc
Elapsed time is 0.051 seconds.
octave> tic; C = A.+ (1:n)'; toc
Elapsed time is 0.01 seconds.
octave> isequal (C, B)
ans =  1

非常に古いバージョンの octave を使用している場合は、代わりにbsxfun (@plus, A, (i:m)').

ただし、i式の右側が他の変数のインデックス付けに使用される場合、解決策は異なります。たぶん、解決策はcumsum、または他のcumfoo機能です。

あなたの質問は基本的に「コードをベクトル化するにはどうすればよいですか?」であり、これは非常に大きなテーマであり、何をベクトル化しようとしているのかはわかりません。

于 2013-05-10T12:47:57.210 に答える
0

convベクトル入力のみを受け入れるため、for ループなしでこれを行うことはできないと思いますが、間違っている可能性があります。bsxfunまたはとマトリックス入力arrayfunを組み合わせて使用​​する方法がわかりません。conv私は間違っているかもしれませんが...私は修正されるつもりです。

于 2013-05-10T15:12:11.477 に答える