0

どうすればループを構築できるかについて質問があります。二重配列があり、そのプロセスをコーディングしたいと思います。

これは、プロセスを適用する配列であり、長さは4x4です(最初の配列のみを実行していますが、元の配列は4x4x3でした)。

b1= (:,:,1);

このプロセスのすべての値に適用したいと思います。

1.-配列のすべての値の情報を使用して、毎回ベクトルを作成します。

ma= 0;
 for p=(136:136)
 ma(p)=b1(1,1,1);
 end
 for p=(312:2151)
     ma(p)=0
 end
 ma= ma';

次に、次のプロセスで最後の結果を処理する必要があります(以前に変数を定義しました)。spout1_a = spb1y.ma; spout1_b =spout1_a./spsum_pesos1; spout1_c = sum(spout1_b);

問題は、1つの値(最初の値)に対してそれを実行する方法を知っていることですが、すべての値に対して実行できるわけではありません。どうすればいいですか?

ご挨拶とありがとうございました、

エマ

編集

b1= Refl(:,:,1);

load sp1.txt;

spb1y= sp1(:,1);
spsum_pesos1= sum(spb1y);
output = cell(length(banda1), 5); % this works well

 for i = 1:numel(b1)
    ma = zeros(2151,1);
    ma(136) = output(i);
    spout1_a= spb1y.*ma;
    spout1_b= spout1_a./spsum_pesos1;
    spout1_c= sum(spout1_b); % I want to save that result on every value of the matrix
end 

私はこの最後の部分をうまく書いていますか?

4

2 に答える 2

1

簡単な解決策は、すべての変数にインデックスqを追加してから、q = 1:3からループすることです。

b(q)= Matrix(:,:,q)
ma(p,q)

etcetera

于 2012-11-08T12:44:19.563 に答える
1

以下に、MATLABでコーディングするためのいくつかの指針を示します。

  1. 事前割り当て:変数がループ内の次元で大きくならないように、ループの前にメモリを割り当てます。これにより、MATLABは各反復で動的にメモリを割り当て、実行時間を大幅に遅くする可能性があります。
  2. Vecotrize:必要な場所でのみループを使用するようにしてください。多くの場合、代わりにベクトル化された操作を使用できます。これははるかに高速です。

そうは言っても、これを試すことができます:

% # Iterate over each value in 'b1'
for i = 1:numel(b1)

    % # Create a vector 'ma'
    ma = zeros(2151, 1);
    ma(136) = b1(i);

    % # Do some more calculations with 'ma' ...
    spout1_a = ma;
    spout1_b= spout1_a ./ spsum_pesos1;
    spout1_c= sum(spout1_b);
end

何を達成したいかはわかりませんが、このコードは質問の内容を正確に実行します。

于 2012-11-08T12:47:39.577 に答える