Có một thuật toán để sắp xếp lại một ma trận thành dạng đường chéo khối, cho rằng ma trận là đường chéo khối trong tự nhiên nhưng được chọn ngẫu nhiên với sự lựa chọn cơ bản không khôn ngoan?
Cụ thể, có mô-đun python nào cho việc này không?
Có một thuật toán để sắp xếp lại một ma trận thành dạng đường chéo khối, cho rằng ma trận là đường chéo khối trong tự nhiên nhưng được chọn ngẫu nhiên với sự lựa chọn cơ bản không khôn ngoan?
Cụ thể, có mô-đun python nào cho việc này không?
Câu trả lời:
Là ma trận thưa thớt hay dày đặc? Có đối xứng không?
Tôi giả sử bằng cách "sắp xếp lại", bạn có nghĩa là hoán vị các mục, thay vì áp dụng một số phép biến đổi tương tự tổng quát hơn cho ma trận. Trong trường hợp đó, bạn có thể nghĩ về ma trận dưới dạng biểu đồ; hai đỉnh , của đồ thị này được kết nối nếu . Nếu ma trận không đối xứng, thì các cạnh được định hướng, nhưng đó là cùng một ý tưởng.A i j A i j ≠ 0
Thực tế là ma trận của bạn là đường chéo khối (sắp xếp lại) có nghĩa là đồ thị không được kết nối và việc tìm các đỉnh nào sẽ nằm trong một khối với nhau để tìm các thành phần được kết nối của biểu đồ. Bạn có thể làm điều này với một tìm kiếm đầu tiên . Vì thứ tự đảo ngược Cuthill-McKee của ma trận về cơ bản là tìm kiếm đầu tiên, nên bạn có thể tìm mã Python của ai đó để đặt hàng RCM và sử dụng trực tiếp hoặc sửa đổi nó cho mục đích của bạn.
Mỗi ma trận là khối chéo trong một lựa chọn cơ bản khôn ngoan - đây được gọi là dạng bình thường của Jordan và cơ sở được tạo thành từ các hàm riêng tổng quát của nó. Nếu ma trận đối xứng, cơ sở này được tạo thành từ các hàm riêng và bạn có thể tính toán nó bằng cách sử dụng thuật toán QR . SciPy cung cấp mô-đun linalg.qr
để tính toán phân tách QR cần thiết. Mặt khác, bạn có thể sử dụng phân tách giá trị số ít , có thể được tính bằng cách sử dụng linalg.svd
.