質問

このような例を参照しています。ベクトル「入力」の要素を分析する機能があります。これらの要素に特別なプロパティがある場合、私はその値をベクトル「出力」に保存します。問題は、物ggingいで、「output」に保存する必要がある要素の数をわからないので、そのサイズはわからないということです。ループがあります。内部では、インデックスを介してベクトルの周りを「入力」します。このベクトルの特別な要素を考慮すると、「入力」の値をキャプチャし、このような文を通してベクトル「ouput」に保存されます。

For i=1:N %Where N denotes the number of elements of 'input'
...
output(j) = input(i);
...
end

問題は、以前に「出力」を「宣言」しないとエラーが発生したことです。ループに到達する前に出力=入力として「出力」を「宣言」したくない。私に関連しています。誰かがこの問題について私を照らしますか?ありがとうございました。

役に立ちましたか?

解決

forループのロジックはどれくらい複雑ですか?

簡単な場合は、このようなものが機能します。

output = input ( logic==true )

あるいは、ロジックが複雑で、大きなベクトルを扱っている場合、要素を保存するかどうかを保存するベクトルを事前に繰り返します。これがコードの例です。

N = length(input); %Where N denotes the number of elements of 'input'
saveInput = zeros(1,N);  % create a vector of 0s
for i=1:N
    ...
    if (input meets criteria)
        saveInput(i) = 1;
    end
end
output = input( saveInput==1 ); %only save elements worth saving

他のヒント

些細な解決策は次のとおりです。

% if input(i) meets your conditions
output = [output; input(i)]

これが良いパフォーマンスを持っているかどうかはわかりませんが

もしも N それがあなたのメモリの問題を引き起こすように大きすぎないので、あなたは事前に割り当てることができます output 同じサイズのベクトルに input, 、およびループの最後にあるすべての役に立たない要素を削除します。

output = NaN(N,1);
for i=1:N
...
output(i) = input(i);
...
end
output(isnan(output)) = [];

2つの選択肢があります

もしも output のサイズが割り当てられれば大きすぎます N, 、またはあなたがのサイズの上限を知らなかった場合 output, 、次のことができます

lengthOutput = 100;
output = NaN(lengthOutput,1);
counter = 1;
for i=1:N
   ...
   output(counter) = input(i);
   counter = counter + 1;
   if counter > lengthOutput
       %# append output if necessary by doubling its size
       output = [output;NaN(lengthOutput,1)];
       lengthOutput = length(output);
   end
end
%# remove unused entries
output(counter:end) = [];

最後に、nが小さい場合、電話するのはまったく問題ありません

output = [];
for i=1:N
   ...
   output = [output;input(i)];
   ...
end

Nが大きくなった場合(たとえば> 1000)、パフォーマンスは劇的に低下することに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top