Hello! I have cell arrays, help me deal with the loop.
for i = 1:length(Animal)-1
Y=[X{i}];
end
data looks like this % X{1}=[0] X{2}=[0 1.2 1.4 1.6] X{3}=[0] X{4}=[0 1.3 1.5 1.6]....
My task is to create a 4x800 matrix, where if zero is the column [0 0 0 0], and the values ​​will be in the column

 採用された回答

Andrei Bobrov
Andrei Bobrov 2019 年 7 月 25 日

1 投票

Y = cell2mat(cellfun(@(x)[x(:);zeros(4-numel(x),1)],X,'un',0));

3 件のコメント

Lev Mihailov
Lev Mihailov 2019 年 7 月 25 日
Error using cat
Dimensions of matrices being concatenated are not consistent.
Error in cell2mat (line 75)
m{n} = cat(2,c{n,:});
Error in Animal (line 9402)
Y = cell2mat(cellfun(@(x)[x(:);zeros(4-numel(x),1)],X,'un',0));
Andrei Bobrov
Andrei Bobrov 2019 年 7 月 25 日
Hi Lev!
Please attach your data X as mat-file.
Andrei Bobrov
Andrei Bobrov 2019 年 7 月 25 日
Variant:
n = cellfun(@(x)numel(x(:)),X);
m = max(n);
k = numel(X);
Y = zeros(m,k);
for ii = 1:k
Y(1:n(ii),ii) = x{ii};
end

サインインしてコメントする。

その他の回答 (1 件)

Felix Albrecht
Felix Albrecht 2019 年 7 月 25 日

1 投票

Try preallocating with zeros:
Y = zeros(4,800);
% Assuming that length(Animal)-1 = 800
for i = 1:length(Animal)-1
Y(:,i) = X{i};
end

2 件のコメント

Andrei Bobrov
Andrei Bobrov 2019 年 7 月 25 日
+1
Lev Mihailov
Lev Mihailov 2019 年 7 月 25 日
編集済み: Lev Mihailov 2019 年 7 月 25 日
Y = zeros(4,800);
% Assuming that length(Animal)-1 = 800 length(Animal)=801
for i = 1:length(Animal)-1
Y(:,i) = X{i}; % X{i} 1x800
end
Index exceeds matrix dimensions.
Error in Max_int2407edt (line 9408)
what could be wrong?

サインインしてコメントする。

カテゴリ

ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by