Khi gọi norm
trên ma trận trong MATLAB, nó trả về cái được gọi là "chuẩn mực ma trận" (giá trị vô hướng), thay vì một mảng các chỉ tiêu vectơ. Có cách nào để có được các chỉ tiêu của mỗi vector trong một ma trận mà không lặp và tận dụng lợi thế của vector hóa MATLAB?Chỉ tiêu Vector của một mảng vectơ trong MATLAB
Trả lời
Bạn có thể tính toán chỉ tiêu của từng cột hoặc hàng của ma trận bằng cách sử dụng element-wise arithmetic operators và các hàm được xác định để hoạt động trên các kích thước ma trận đã cho (như SUM và MAX). Đây là cách bạn có thể tính toán một số chỉ tiêu cột-khôn ngoan cho một ma trận M
:
twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column
pNorm = sum(abs(M).^p,1).^(1/p); %# The p-norm of each column (define p first)
infNorm = max(M,[],1); %# The infinity norm (max value) of each column
Những chuẩn mực có thể dễ dàng được thực hiện để hoạt động trên các hàng thay vì các cột bằng cách thay đổi các tham số chiều từ ...,1
để ...,2
.
có lẽ bạn nên chỉ định rõ ràng các kích thước mà SUM và MAX hoạt động, theo cách đó sẽ dễ dàng chuyển sang các chỉ tiêu khôn ngoan theo hàng ... – Amro
@Amro: Đề xuất tốt. Làm xong! – gnovice
Nếu 'M' chỉ bao gồm các số thực, bạn có thể thay thế' abs (M) 'bằng' M' trong 'haiNorm' khi'.^2' hủy bỏ bất kỳ dấu hiệu âm nào. – kroimon
Việc triển khai hiện tại cho hai chuẩn có thể được cải thiện.
twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column
abs(M).^2
sẽ tính toán toàn bộ các rễ vuông không cần thiết vừa được bình phương thẳng.
Viễn tốt hơn để làm:
twoNorm = sqrt(
sum(real(M .* conj(M)), 1)
)
này xử lý một cách hiệu quả thực tế và phức tạp M.
Sử dụng real()
đảm bảo rằng sum
và sqrt
hành trên số thực (chứ không phải là số phức với 0 phần tưởng tượng).
Từ phiên bản 2017b trở đi, bạn có thể sử dụng vecnorm.
- 1. vectơ nối của một mảng ô trong MATLAB
- 2. Phát triển Hashmap của vectơ trong Matlab
- 3. Tạo vectơ trong MATLAB
- 4. Xoay một vectơ (mảng)
- 5. Làm thế nào để kiểm tra trong MATLAB nếu một vector chỉ chứa số không?
- 6. Lập chỉ mục một tiêu chuẩn :: vectơ với chỉ số âm
- 7. Làm cách nào để xóa các phần tử tại một tập hợp các chỉ mục trong một vectơ trong MATLAB?
- 8. MATLAB: sao chép vectơ 'n' lần
- 9. được vector hóa nếu trong MATLAB
- 10. Lập chỉ mục mảng 2D trong MATLAB
- 11. Vector hóa Notion of Colon (:) - giá trị giữa hai vectơ trong MATLAB
- 12. Tách một mảng trong MATLAB
- 13. MATLAB: trích xuất mọi phần tử thứ n của vector
- 14. Cách "truyền" một tiêu chuẩn :: vector <char> tới tiêu chuẩn :: vector <wchar_t>
- 15. Nhân vectơ vector-vector yếu tố trong BLAS?
- 16. Octave/Matlab: Thêm các phần tử mới vào một vector
- 17. Matlab, cách lọc một vector số theo điều kiện?
- 18. C++ vectơ mảng char
- 19. 'Mảng mảng' trong MATLAB?
- 20. Preallocation của mảng tế bào trong MATLAB
- 21. Trong C++, hàm vectơ push_back có tăng kích thước của một mảng trống không?
- 22. Khởi tạo một vectơ std :: string với một mảng
- 23. Phụ thêm một vector để một vector
- 24. Giá trị mảng thỏa thuận cho một trường duy nhất của mảng cấu trúc (trong Matlab)
- 25. Tạo vectơ của boost dynamic_bitset trong C++
- 26. sửa (khóa) kích thước của tiêu chuẩn :: vector
- 27. Vectơ, cấu trúc và tiêu chuẩn :: tìm
- 28. Làm thế nào để tiêu diệt đúng C++ vector của vector và giải phóng bộ nhớ
- 29. Khai báo vectơ trong tệp tiêu đề C++
- 30. Khởi tạo Eigen :: vectơ với std :: vector
tổng hợp là gì? –