2013-05-16 27 views
16

Nói rằng tôi có một ma trận a = [1 2 3 4 5 6];, làm thế nào để định hình lại nó một cách hàng khôn ngoan ví dụ reshape(a, 2, 3) để mangReshape MATLAB vector theo cách Row-khôn ngoan

1 2 3 
4 5 6 

chứ không phải là kết quả cột khôn ngoan mặc định được MATLAB tạo ra:

1 3 5 
2 4 6 

Tôi tin rằng đây là một nhiệm vụ tầm thường có thể có chức năng sẵn có để đạt được điều này. Tôi đã thực hiện một chức năng mà thực hiện điều này một cách hoàn hảo ... tuy nhiên, có một cách ngắn hơn, neater và nhiều hơn nữa MATLAB? Cảm ơn.

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 

Trả lời

21

Làm thế nào về điều này?

reshape(a, 3, 2)'

3

Cách chung để định hình lại một m*n ma trận A đến một p*k ma trận B một cách hàng khôn ngoan là:

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

Nó thực sự là định hình lại (A', cols, hàng) '

(định dạng lại (a', 3, 2) 'trong ví dụ của bạn)

+0

Chúc mừng để xóa câu hỏi của bạn ngay bây giờ - Tôi vừa dành 10 phút để chuẩn bị câu trả lời . Tôi có thể hữu ích cho người khác. (Tôi nghĩ đó là một câu hỏi hay). –

+0

Tôi sẽ đăng lại câu hỏi sau đó @MatthewTaylor – Mortada

Các vấn đề liên quan