Mam macierz 3D i chcę przechowywać każdy element 2D tego w rzędzie innej macierzy 2D, która ma wiele wierszy jako trzeci wymiar macierzy 3D.Jak mogę zapisać macierz w rzędzie innej macierzy? MATLAB
Jak mogę to zrobić?
Mam macierz 3D i chcę przechowywać każdy element 2D tego w rzędzie innej macierzy 2D, która ma wiele wierszy jako trzeci wymiar macierzy 3D.Jak mogę zapisać macierz w rzędzie innej macierzy? MATLAB
Jak mogę to zrobić?
reshape(permute(A,[3 2 1]),size(A,3),[])
Sample Run -
>> 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
To jest łatwo zrobić z MATLABs matryca rozwijał składnię:
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
(uwaga Zadzwoniłem O
rzeczą, którą nazywamy N
na zdjęciach)
z tym przechowywać elementy macierzy A w kolumnach macierzy B. W każdym razie bardzo dziękuję;) –
@Traker Zmieniono to! Jednak inne odpowiedzi są lepsze;) –
Jeśli nie przeszkadza trochę indeksowania szaleństwo ...
można zbudować linear index z appropriate shape, który nakłada się na oryginalnej tablicy da pożądanego rezultatu :
B = A(bsxfun(@plus, (1:L*M:L*M*N).', reshape(bsxfun(@plus, (0:L:L*M-1).', 0:L-1),1,[])));
przykład:
>> 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
Wynik:
>> 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
To ciężka praca, ale fajnie, założę się! :) – Divakar
Już skorzystałeś z opcji preferowanej ... :-) –
Dziękuję bardzo Luis, przy okazji, byłeś moim nauczycielem CMOV w tym roku. Cieszę się, że jestem na tym samym forum, co mój nauczyciel: DDD –
Dzięki za pomoc :) –
To byłby mój ulubiony sposób też! –