2012-10-01 46 views
7

Tôi có ma trận M x N. Tôi muốn nhân mỗi cột N với ma trận M x M. Sau đây làm điều này trong một vòng lặp, nhưng tôi không có ý tưởng làm thế nào để vectorize nó.Nhân mỗi cột của ma trận bằng một ma trận khác

u=repmat(sin(2*pi*f*t),[n 1]); 
W = rand(n); 
answer = size(u); 
for i=1:size(u,2) 
    answer(:,i) = W*u(:,i); 
end 

Trả lời

13

Bạn chỉ cần nhân hai ma trận:

answer = W*u; 

Hãy suy nghĩ về nó: trong mỗi lần lặp của vòng lặp của bạn bạn nhân một ma trận bởi một vector. Kết quả của phép toán đó là một vectơ mà bạn lưu vào câu trả lời của bạn trong cột i. Phép nhân ma trận là một điều tương tự: bạn có thể hiểu nó như phép nhân của một ma trận (W) bởi một tập hợp các vectơ, hình thành ma trận của bạn u.

Vì vậy, mã của bạn tốt, chỉ cần xóa vòng lặp :)

+2

Không chắc chắn nếu chỉ cách nhau hoặc thực sự chậm phát triển. :-) Cảm ơn. – mac389

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