reshape 4-dimension array

5 vues (au cours des 30 derniers jours)
Bill Greene
Bill Greene le 21 Fév 2025
Modifié(e) : Matt J le 23 Fév 2025
I have an array dimensioned A(m,m,M,M). I would like to "reshape" this so that each mxm block is in the correct position in a B(m*M,m*M) matrix where the correct position is indicated by the third and fourth indices.
Can someone show me a straightforward way to do this?

Réponse acceptée

Stephen23
Stephen23 le 21 Fév 2025
Modifié(e) : Stephen23 le 21 Fév 2025
A = randi(9,3,3,5,5);
[~,M,~,N] = size(A);
B = permute(A,[1,3,2,4]);
B = reshape(B,[M*N,M*N])
B = 15×15
3 1 4 2 7 7 4 7 8 5 7 2 4 7 7 1 9 1 2 2 5 9 8 2 5 6 1 7 8 3 7 6 2 3 4 3 6 8 9 5 7 5 2 7 6 4 1 9 6 4 3 2 9 1 9 4 8 7 1 6 1 2 7 3 1 8 9 9 4 2 5 7 2 9 5 8 5 8 8 3 5 8 6 4 1 4 3 8 3 9 2 6 7 3 2 2 5 7 9 4 2 2 5 9 3 9 4 4 2 7 3 8 8 9 7 3 2 9 8 7 7 2 3 2 9 7 2 4 6 7 7 9 3 6 8 5 5 4 1 9 5 4 1 5 2 1 4 3 8 5
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Checking some random block:
X = 3;
Y = 5;
A(:,:,X,Y)
ans = 3×3
5 9 3 9 8 7 3 6 8
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
B(...
((X-1)*M+1):(X*M),...
((Y-1)*M+1):(Y*M))
ans = 3×3
5 9 3 9 8 7 3 6 8
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
  1 commentaire
Bill Greene
Bill Greene le 21 Fév 2025
Fantasitic, thanks!

Connectez-vous pour commenter.

Plus de réponses (1)

Matt J
Matt J le 23 Fév 2025
Modifié(e) : Matt J le 23 Fév 2025

Catégories

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

Produits


Version

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by