2012-10-23 46 views
9

Làm thế nào để chuyển đổi một Eigen::Matrix<double,Dynamic,Dynamic> thành Eigen::SparseMatrix<double>? Tôi đang tìm kiếm một cách tốt hơn thay vì lặp qua ma trận dày đặcEigen chuyển đổi ma trận dày đặc thành thưa thớt một

+0

Hãy để tôi hiểu điều này. Bạn muốn chuyển đổi một ma trận dày đặc thành một ma trận thưa thớt mà không kiểm tra, các mục nào là số không và cần được loại bỏ và các mục nhập nào bạn muốn giữ lại? Làm thế nào để bạn nghĩ rằng điều này có thể làm việc? Bạn chắc chắn nên làm việc với câu hỏi đó - nó rất không rõ ràng. – angainor

+1

Không kiểm tra các phần tử theo cách thủ công. Tôi đang tìm một phương thức hoặc một hàm hoặc một thư viện để làm điều này. Nhưng từ những gì tôi đọc ở đây tôi nghĩ rằng điều đó là không thể – tyranitar

Trả lời

14

bạn có thể sử dụng phương pháp sparseView() cho rằng:

sparse = dense.sparseView();

và thậm chí xác định một sự khoan dung:

sparse = dense.sparseView(epsilon,reference);

1

Bạn có kiểm soát việc tạo ma trận dày đặc không?

Nếu bạn không có thì không có cách nào để thực hiện việc này mà không cần đọc từng phần tử ma trận để xem nó có trống không.

Nếu bạn tự tạo ma trận dày đặc, bạn có thể tạo cấu trúc dữ liệu để giúp chuyển đổi cấu trúc thành thưa thớt khi cần. Bạn có thể ví dụ lưu trữ với mỗi hàng ma trận số lượng các phần tử không null trong hàng đó. Sau đó, bạn có thể bỏ qua các hàng có 0 phần tử không null và bạn có thể ngừng chuyển đổi bất kỳ hàng nào khi bạn đã thấy nhiều phần tử không null như số đếm cho bạn biết.

Dữ liệu bổ sung nào bạn lưu trữ sẽ phụ thuộc vào loại ma trận thưa thớt mà bạn mong đợi. Một mẫu ma trận thưa thớt phổ biến là các submatric dày đặc nổi trong ma trận thưa thớt. Bạn có thể nontate những khu vực dày đặc khi bạn tạo ra các ma trận dày đặc. Ví dụ. không lưu trữ một phần tử đếm cho mỗi hàng, mà đúng hơn là giữ một danh sách các vùng hình chữ nhật không rỗng tại một số giá trị x, y nhất định.

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