Effacer les filtres
Effacer les filtres

concatenating elements of an array in a certain manner

2 vues (au cours des 30 derniers jours)
Mnr
Mnr le 28 Juin 2015
Commenté : Guillaume le 29 Juin 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.

Réponse acceptée

Matt J
Matt J le 28 Juin 2015
Modifié(e) : Matt J le 28 Juin 2015
c=permute(b(:,:,1:j-1),[1,3,2]);
c=num2cell(c,[1,2]);
c=c(:).';

Plus de réponses (1)

Guillaume
Guillaume le 28 Juin 2015
Modifié(e) : Guillaume le 29 Juin 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 commentaires
Mnr
Mnr le 28 Juin 2015
Thanks for your valuable note! However, I am getting an error when I run the code.
Guillaume
Guillaume le 29 Juin 2015
Fixed now.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by