2012-11-13 34 views
16

Tôi có 3 cột, n hàng ma trận:áp dụng chức năng tiêu chuẩn để hàng của ma trận - Matlab

[ a,b,c; 
    d,e,f; 
    g,h,i; ] 

Tôi muốn áp dụng các chức năng tiêu chuẩn cho mỗi hàng, và nhận được một ma trận 1xn chứa các chỉ tiêu :

[ norm([a,b,c]); 
    norm([d,e,f]); 
    norm([g,h,i]); ] 

Tôi có thể làm điều này với vòng lặp for, nhưng có cách nào tốt hơn không?

+2

thực sự đó cũng là vấn đề của tôi. Trong trường hợp của tôi, tôi phải đánh giá định mức vị trí của các hạt có tọa độ nằm trong các hàng của ma trận. Những gì tôi thường làm là: 'norms = sqrt (A (:, 1).^2 + A (:, 2).^2 + A (:, 3).^2)'. Nhưng tôi mạnh mẽ nghi ngờ sự tồn tại của một cách thông minh hơn;). – Acorbe

Trả lời

29

gì về

norms = sqrt(sum(A.^2,1)) 

hoặc

norms = sqrt(sum(A.^2,2))? 

tuỳ thuộc vào việc tọa độ của bạn là trong hàng hoặc cột.

+2

có nghĩa là "tọa độ nằm trong cột hoặc hàng". sum (..., 1) cộng thêm mỗi cột và tổng (..., 2) cộng thêm trên mỗi hàng. – Robino

1

nếu kích thước đầu tiên là không quá lớn:

norms = sqrt(diag(A * A')); 
+2

Dường như với tôi rằng bạn luôn phải đối mặt với kích thước lớn hơn, ý tôi là, để có thể hữu ích, 'A * A'' phải luôn trả về ma trận 'n x n'. Điều đó sẽ cung cấp cho bạn rất nhiều chi phí, mặc dù. – Acorbe

+0

có, kết quả của 'A * A'' là nxn. – Serg

+1

Mã được cho là thú vị để đọc, phải không? : P – Robino

1

Nếu khả năng đọc là một xem xét lớn hơn hiệu suất mà bạn cũng có thể xem xét:

norms = cellfun(@norm,num2cell(A,2)); 

mô hình này cũng là thích nghi với các hoạt động khác dọc theo một kích thước bạn có thể muốn thực hiện, nơi MATLAB không hỗ trợ nó nguyên bản.

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