2016-08-04 14 views
0

私はそうのようなセル配列があります。forループが最初の2行0を作成し、3番目の権利を行っています。

x={rand(901,160),rand(901,160),rand(901,160)};

を、私はこの使用して、単一の行に各行列を下に崩壊しようとしている:何が起こっている

for i = size(x,2) 
     y_concat(i,:)= (x{i}(:)') 
end 

は、最初の2点です行は0で3番目は正しいです。

私はindivually各行列を実行した場合、それがうまくすなわち動作します:

y_concat(1,:)= (x{1}(:)') 

y_concat(2,:)= (x{2}(:)') 

y_concat(3,:)= (x{3}(:)') 

私は何をしないのですか?また、正しい方法...

答えて

2

ループはi = size(x, 2)に対して1回だけ実行されます。あなたは、あなたが最初のコロン演算子を使用して、値の配列を作成する必要があります1size(x, 2)間の値ごとにループする必要があります。

for k = 1:size(x, 2) 
    y_concat(k,:) = x{k}(:).' 
end 

あなただけ明示的に割り当てるため、最初の2行は、すべての0年代であることを理由がありますMATLABは暗黙的に他の行を0の値で塗りつぶします。

y_concat = reshape(cat(3, x{:}), [], numel(x)).'; 
+0

うわー:

ループの別の代替のようなものである可能性があります。私はそれを逃した私は恥ずかしいです。ありがとうございました –

+0

@TedMosbyループを完全に避けたい場合は、私のアップデートをご覧ください。 – Suever

関連する問題