2013-05-16 16 views
16

Załóżmy, że posiada matrycę a = [1 2 3 4 5 6];, w jaki sposób zmiany kształtu go w wierszami sposób, na przykład reshape(a, 2, 3) otrzymującReshape MATLAB wektora w sposób w rzędach

1 2 3 
4 5 6 

niż domyślny wyniku Kolumnowa wyprodukowany przez MATLAB z:

1 3 5 
2 4 6 

Wierzę, że jest to banalne zadanie, które prawdopodobnie ma wbudowaną funkcję, aby to osiągnąć. Mam już zaimplementowaną funkcję, która robi to doskonale ... jednak czy istnieje krótszy, lepszy i bardziej MATLAB sposób? Dzięki.

function y = reshape2(x, m, n) 
    y = zeros(m, n); 

    ix = 0; 
    for i = 1:m 
    for j = 1:n 
     ix = ix + 1; 
     y(i, j) = x(ix); 
    end 
    end 
end 

Odpowiedz

21

Co powiesz na to?

reshape(a, 3, 2)'

3

ogólny sposób przekształcania się m*n macierz A do p*k macierzy B, w sposób w rzędach jest:

c=reshape(A',1,m*n) 
B=reshape(c,k,p)' 
example: m=3 n=4 , p=6, q=2 
A=[1 2 3 4; 5 6 7 8; 9 10 11 12] 
c=[1 2 3 4 5 6 7 8 9 10 11 12] 
B=[1 2 ; 3 4; 5 6; 7 8; 9 10; 11 12] 
1

Jest rzeczywiście przekształcenia (a”, cols rzędy) '

(przekształcenia (A', 3, 2)”w przykładzie)

+0

Cheers za usunięciem zapytanie właśnie teraz - ja właśnie spędziliśmy 10 minut przygotowuje odpowiedź . Mogłem być przydatny dla kogoś innego. (Myślałem, że to dobre pytanie). –

+0

Och, ponownie opublikuję pytanie, a następnie @MatthewTaylor – Mortada

Powiązane problemy