2011-11-19 10 views
7

私はzero(3)と初期化された行列(Xと呼ぶ)を持っています。MATLABでセル配列を作成し、すべての要素を同じオブジェクトに初期化する方法は?

Xがサイズ(例えば)(3,1)のセル配列であり、各要素をzero(3)に初期化するようにコードを変更したいとします。

私はループで行うことができますが、より良い方法がありますか?

X = cell(3,1); 
for ii=1:numel(X) 
    X{ii} = zeros(3); 
end 

答えて

9

deal()でこれを行うことができます。

>> [X{1:3, 1}] = deal(zeros(3)) 

X = 

    [3x3 double] 
    [3x3 double] 
    [3x3 double] 
+0

注意。たとえば、 '[X {1:4、1}] = deal(zeros(4))'の前にこのように定義されていた場合は、 –

7

代替方法:

X = repmat({zeros(3)}, 3, 1); 

別の1:

X = cell(3,1); 
X(:) = {zeros(3)}; 
+0

の代わりに、Xのサイズが新しいコンテンツと同じ行で決まるという利点があります。私は彼らに対処することを好むだろう。 dealはおそらく他の接続で使用されるのがベストです。 – Trilarion

3

そして、まだ別の方法:

X = {zeros(3)}; 
X(1:3,1) = X; 

このソリューションは、あなたがに割り当てることができるという事実を使用しています変数のサイズを超えているインデックス。この場合、Matlabは自動的に展開されます。同様に

:これは 'X'がすでに存在している場合ではない安全であることを

clear X; 
X(1:3,1) = {zeros(3)}; 
関連する問題