Trying to convert cell to array when cells have range of values
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I have a 1x1000 cell that I am trying to convert to an array so I can easily copy out all the columns and rows of data. Unfortunately, in each cell there are doubles that vary in length (80x1 double, 81x1 double, 79x1 double) I tried cell2mat but since they are all different lengths that did not work.
What if any function may do what I am trying to do and fill in the void spaces with placeholders that are not 0?
Thank you in advance.
0 comentarios
Respuesta aceptada
Rik
el 11 de Mayo de 2018
This should do the trick. It assumes array indexing is possible.
a={[1 2 3]',[1 1]',[1 2 3 4 5 6]'};
maxlen=max(cellfun('length',a));
clc
a2=cellfun(@extend_to_maxlength,...
a,repmat({maxlen},size(a)),...
'UniformOutput',false);
a2=cell2mat(a2);
function x=extend_to_maxlength(x,maxlen)
if numel(x)<maxlen
x(maxlen)=0;
end
end
0 comentarios
Más respuestas (1)
Ameer Hamza
el 11 de Mayo de 2018
Editada: Ameer Hamza
el 11 de Mayo de 2018
try this:
% creating test data
a{1} = 1:4;
a{2} = 1:5;
a{3} = 1:10;
% solution
maxElements = max(cellfun(@length, a)); % finding maximum length of appropriate padding of zeros
matrix = cellfun(@(x) [x(:);zeros(maxElements-length(x), 1)], a, 'UniformOutput', 0);
matrix = cell2mat(matrix);
1 comentario
Ver también
Categorías
Más información sobre Data Type Conversion en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!