Tôi đang cố gắng tìm hiểu xem có cách nào nhanh hơn để tính toán tất cả các giá trị riêng và hàm riêng của một ma trận kề kề rất lớn và thưa thớt hơn là sử dụng scipy.spude.linalg.eigsh Theo tôi biết, phương pháp này chỉ sử dụng độ thưa thớt và thuộc tính đối xứng của ma trận. Một ma trận kề cũng là nhị phân, điều khiến tôi nghĩ rằng có một cách nhanh hơn để làm điều đó.
Tôi đã tạo một ma trận kề ngẫu nhiên 1000x1000 ngẫu nhiên và so sánh giữa một số phương thức trên máy tính xách tay x230 ub Ubuntu 13.04 của tôi:
- scipy.spzzy.linalg.eigs: 0,65 giây
- scipy.spzzy.linalg.eigsh: 0,44 giây
- scipy.linalg.eig: 6.09 giây
- scipy.linalg.eigh: 1,60 giây
Với các eigs và eigsh thưa thớt, tôi đặt k, số lượng các giá trị riêng và hàm riêng mong muốn, là thứ hạng của ma trận.
Vấn đề bắt đầu với ma trận lớn hơn - trên ma trận 9000x9000, phải mất scipy.spzzy.linalg.eigsh 45 phút!