私は、ループプロシージャで各反復の結果を連結することによって、MatlabにベクトルX
を構築しています。サイズを知らずにMatlabのスペースを事前に割り当てていますか?
私は、現時点ではやっている何が
X=[];
for j=1:N
%do something that delivers a vector A
%X=[X;A]
end
Aの大きさは、私はスペースを事前に割り当てることが可能な任意の方法はあり演繹的に予測することは不可能であるのですか?
私は、ループプロシージャで各反復の結果を連結することによって、MatlabにベクトルX
を構築しています。サイズを知らずにMatlabのスペースを事前に割り当てていますか?
私は、現時点ではやっている何が
X=[];
for j=1:N
%do something that delivers a vector A
%X=[X;A]
end
Aの大きさは、私はスペースを事前に割り当てることが可能な任意の方法はあり演繹的に予測することは不可能であるのですか?
可能な解決策:
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{:});
ありがとうございます。私は大きな次元で大きなスピードを得ることができると思いますか? – user3285148
@ user3285148はい、質問のコードよりもはるかに高速です。 btwあなたはどのように大きなディメンションを扱っていますか? –
サイズ(X、1)は200,000にすることができます – user3285148
場合、それは "はい/いいえの質問" ですが、答えはありません** **です。あなたは、スペースの近似をあらかじめ割り当てておくか、または十分に大きくなければならないスペース(あなたがAの知識を持っていると仮定します)... "スペース"はあらかじめ割り当てることができます。 – Rotem
本当に 'j'と' N'からXのサイズに関する情報を得ることができない場合、あなたができることは過剰割り振りです。 – excaza