Problem with vertically Concatenating vectors in a function
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Joel Schelander
el 27 de Abr. de 2021
Comentada: Joel Schelander
el 28 de Abr. de 2021
I have a cell array ABC containing three cells each cell contains a 1x1000 double. What I want is to put every double on top of each other in a column vector (nx1).
ABC={1x1000 cell
1x992 cell
1x928 cell);
My function looks like this:
nr=3;
s=1000;
[D]=func(nr,ABC,s);
function D = func(nr,ABC,s)
D = [];
for y =1:nr
data_length = length(ABC{y});
for o = 1:data_length
G((o-1)*s+1:o*s) = [ABC{y}{o} zeros(1,s-length(ABC{y}{o}))].';
end
D = [D; G.'];
end
end
My output should be D=2920000x1 double
But my output now is D=3000000x1 double
0 comentarios
Respuesta aceptada
Stephen23
el 28 de Abr. de 2021
Editada: Stephen23
el 28 de Abr. de 2021
Rather than using a loop, a much better use of MATLAB would be to use comma-separated lists:
For example:
out = cellfun(@(a)a(:),[ABC{:}],'uni',0);
out = vertcat(out{:})
Or
out = [ABC{:}];
out = [out{:}].'
2 comentarios
Stephen23
el 28 de Abr. de 2021
"Since every element is a double of 1x1000..."
Lets check that first. Show the output of these commands:
vec = cellfun(@numel,[AAG{:}]);
find(vec~=1000)
Más respuestas (1)
DGM
el 27 de Abr. de 2021
% a cell array of numeric row vectors
A = {1:3,10:14,1:5}
% all row vectors concatenated into a col vector
bigcolvec = [A{:}]'
gives
A =
1×3 cell array
{1×3 double} {1×5 double} {1×5 double}
bigcolvec =
1
2
3
10
11
12
13
14
1
2
3
4
5
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices 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!