2017-03-20 7 views
2

私は、ループプロシージャで各反復の結果を連結することによって、MatlabにベクトルXを構築しています。サイズを知らずにMatlabのスペースを事前に割り当てていますか?

私は、現時点ではやっている何が

X=[]; 
for j=1:N 
    %do something that delivers a vector A 
    %X=[X;A] 
end 

Aの大きさは、私はスペースを事前に割り当てることが可能な任意の方法はあり演繹的に予測することは不可能であるのですか?

+1

場合、それは "はい/いいえの質問" ですが、答えはありません** **です。あなたは、スペースの近似をあらかじめ割り当てておくか、または十分に大きくなければならないスペース(あなたがAの知識を持っていると仮定します)... "スペース"はあらかじめ割り当てることができます。 – Rotem

+1

本当に 'j'と' N'からXのサイズに関する情報を得ることができない場合、あなたができることは過剰割り振りです。 – excaza

答えて

6

可能な解決策:

A=cell(1,N); %Pre-allocating A instead of X as a cell array 
for k=1:N %I changed the name of loop variable since `j` is reserved for imag numbers 
    %Here I am generating a matrix of 5 columns and random number of rows. 
    %I kept number of columns to be constant (5) because you used X=[X;A] 
    %in the question which means number of columns will always be same 
    A{k} = rand(randi([1,10],1,1),5); %doing something that delivers a vector A 
end 
X = vertcat(A{:}); 
+0

ありがとうございます。私は大きな次元で大きなスピードを得ることができると思いますか? – user3285148

+0

@ user3285148はい、質問のコードよりもはるかに高速です。 btwあなたはどのように大きなディメンションを扱っていますか? –

+0

サイズ(X、1)は200,000にすることができます – user3285148

関連する問題