Borrar filtros
Borrar filtros

concatenating elements of an array in a certain manner

2 visualizaciones (últimos 30 días)
Mnr
Mnr el 28 de Jun. de 2015
Comentada: Guillaume el 29 de Jun. de 2015
Hello all,
I have a matrix b, with the dimension of NxLxNm. I would like to first consider b(:,:,1) up to b(:,:,j-1) where j ranges from 1 to Nm. In each iteration of j, I would like to create a new cell c with a total dimension of 1XL, an element dimension of Nxj-1, which concatenates the elements of b(:,:,1) to b(:,:,j-1) in a way such that e.g. c{1}=[b(1,1,1), b(1,1,2), ... b(1,1,j-1); b(2,1,1), b(2,1,2),...b(2,1,j-1),....]; c{2}==[b(1,2,1), b(1,2,2), ... b(1,2,j-1); b(2,1,1), b(2,1,2),...b(2,1,j-1),....], and so forth. I would appreciate if somebody can help me please. Thanks.

Respuesta aceptada

Matt J
Matt J el 28 de Jun. de 2015
Editada: Matt J el 28 de Jun. de 2015
c=permute(b(:,:,1:j-1),[1,3,2]);
c=num2cell(c,[1,2]);
c=c(:).';

Más respuestas (1)

Guillaume
Guillaume el 28 de Jun. de 2015
Editada: Guillaume el 29 de Jun. de 2015
For each j, the creation of the cell array c is a simple mat2cell:
c = mat2cell(b(:, :, 1:j), size(b, 1), ones(1, size(b, 2), j)
Or, if you want to remove the singleton column dimension:
c = cellfun(@squeeze, mat2cell(b(:, :, j), size(b, 1), ones(1, size(b, 2), j), 'UniformOutput', false)
Finally, to create all the c in one go:
allc = arrayfun(@(j) mat2cell(b(:, :, 1:j), size(b, 1), ones(1, size(b, 2)), j), 1:size(b, 3), 'UniformOutput', false)
Note: I'm not too sure why you use j-1, since, if j starts at 1, j-1 index is not valid.
  2 comentarios
Mnr
Mnr el 28 de Jun. de 2015
Thanks for your valuable note! However, I am getting an error when I run the code.

Iniciar sesión para comentar.

Categorías

Más información sobre Multidimensional Arrays 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!

Translated by