2015-09-30 34 views

Antwort

5

Mit permute & reshape -

reshape(permute(A,[3 2 1]),size(A,3),[]) 

Probelauf -

>> A 
A(:,:,1) = 
    7  1  7  5 
    3  4  8  5 
    9  4  2  6 
A(:,:,2) = 
    7  7  2  4 
    7  6  5  6 
    3  2  9  3 
A(:,:,3) = 
    7  7  5  3 
    3  9  2  8 
    5  9  2  3 
>> reshape(permute(A,[3 2 1]),size(A,3),[]) 
ans = 
    7  1  7  5  3  4  8  5  9  4  2  6 
    7  7  2  4  7  6  5  6  3  2  9  3 
    7  7  5  3  3  9  2  8  5  9  2  3 
+0

Danke für die Hilfe :) –

+2

Das wäre meine bevorzugte Vorgehensweise auch gewesen! –

1

, die leicht mit MATLABs Matrix Abrollen Syntax durchgeführt wird:

A=ones(N,M,O); 
B=zeros(O,N*M); 

for ii=1:size(A,3) 
    aux=A(:,:,ii);  % aux is NxM 
    B(ii,:)=aux(:);  % unroll! 
end 

(note rief ich O das, was Sie N in Ihren Bildern nennen)

+0

mit diesem i speichern Sie die Komponenten der Matrix A in den Spalten der Matrix B. Auf jeden Fall vielen Dank;) –

+2

@Traker geändert, dass! Trotzdem sind die anderen Antworten besser;) –

2

Wenn Sie ...

Sie haben nicht ein wenig Indizierung Wahnsinn dagegen eine linear index mit dem appropriate shape aufbauen können, die auf der ursprünglichen Anordnung aufgebracht wird, das gewünschte Ergebnis :

B = A(bsxfun(@plus, (1:L*M:L*M*N).', reshape(bsxfun(@plus, (0:L:L*M-1).', 0:L-1),1,[]))); 

Beispiel:

>> A = randi(10,2,3,4)-1; %// example array; size 2x3x4 
>> A 
A(:,:,1) = 
    5  3  2 
    9  8  9 
A(:,:,2) = 
    8  7  4 
    9  8  6 
A(:,:,3) = 
    3  4  8 
    0  4  4 
A(:,:,4) = 
    2  8  8 
    4  6  7 
Ergebnis

:

>> B 
B = 
    5  3  2  9  8  9 
    8  7  4  9  8  6 
    3  4  8  0  4  4 
    2  8  8  4  6  7 
+0

Das ist harte Arbeit, aber Spaß, ich wette! :) – Divakar

+1

Du hast schon die bevorzugte Option gewählt ... :-) –

+1

Vielen Dank Luis, du bist übrigens mein Lehrer von CMOV in diesem Jahr. Ich bin froh, im gleichen Forum zu sein, dass mein Lehrer: DDD –

Verwandte Themen