How to reshape matrix without loop?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Want to rearrange the matrix A(a,b,c,d) to B(b,c1,c2,d,a), where a,b,c,d are dimensions, c=c1*c2. If known c1=3, for example, B should be:
[a,b,c,d]=size(A);
C=permute(A,[2,3,4,1]);
c2=fix(c/c1);
B=zeros(b,c1,c2,d,a);
for nc=1:c1
B(:,nc,:,:,:)=C(:,nc:c1:end,:,:);
end
Can it be done more elegantly and without the loop?
0 commentaires
Réponses (1)
John D'Errico
le 26 Juil 2017
WTP? Effectively two lines, one more to get the size of A if you don't know it already.
[a,b,c,d] = size(A);
B = reshape(A,[a,b,c1,c/c1,d]);
B = permute(B,[2 3 4 5 1]);
There is no need to use fix, because if c is not exactly divisible by c1, then A won't have the correct number of elements for a reshape anyway.
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!