From cell array to matrix

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

 Risposta accettata

Andrei Bobrov
Andrei Bobrov il 25 Lug 2019
Y = cell2mat(cellfun(@(x)[x(:);zeros(4-numel(x),1)],X,'un',0));

3 Commenti

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 il 25 Lug 2019
Hi Lev!
Please attach your data X as mat-file.
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

Accedi per commentare.

Più risposte (1)

Felix Albrecht
Felix Albrecht il 25 Lug 2019
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 Commenti

Andrei Bobrov
Andrei Bobrov il 25 Lug 2019
+1
Lev Mihailov
Lev Mihailov il 25 Lug 2019
Modificato: Lev Mihailov il 25 Lug 2019
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?

Accedi per commentare.

Categorie

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by