2013-03-14 41 views
7

Tôi biết có các gói trong R để lưu trữ ma trận thưa thớt một cách hiệu quả. Có cách nào để lưu trữ ma trận hạng thấp hiệu quả không? Ví dụ:Lưu trữ ma trận lớn nhưng cấp thấp hiệu quả

A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1) 
B <- A %*% t(A) 

Hiện tại, B quá lớn để lưu trữ trong bộ nhớ nhưng có xếp hạng thấp. Có cách nào để xây dựng và lưu trữ B một cách hiệu quả, chẳng hạn như một số phương pháp đọc cơ bản (rowSums, colSums, v.v.) được thực hiện khi đang chạy, để giao dịch cho CPU hoặc bộ nhớ?

+0

Câu hỏi thú vị- ứng dụng nào sẽ có? (Ví dụ, ma trận bậc thấp thường xuất hiện ở đâu?) –

+0

@DavidRobinson: Các ma trận được sử dụng, như xấp xỉ các ma trận dày đặc lớn (quá lớn để tính toán, hoặc thậm chí lưu trữ), trong một số [thuật toán tối ưu hóa] (http://en.wikipedia.org/wiki/Limited-memory_BFGS). –

+1

Nếu bạn sẵn sàng ước tính B, bạn có thể sử dụng ước lượng gần đúng không, ví dụ: sử dụng SVD và giữ nguyên thứ nguyên đầu tiên của SVD? Không chắc chắn đây là những gì bạn muốn, nhưng có thể đáng xem xét. –

Trả lời

0

Dưới đây là cách tiếp cận khác, mặc dù tôi bỏ lỡ những kinh nghiệm để biết hiệu quả thế nào điều này sẽ cho ma trận lớn:

Nếu cấp bậc thấp, nó có nghĩa là ma trận chứa nhiều đường không thích hợp, mà là sự kết hợp tuyến tính của người khác. Nếu ma trận đại diện cho một hệ phương trình tuyến tính của phương trình, người ta có thể thiết kế một thuật toán, loại bỏ liên tiếp những dòng đó.

Để kiểm tra xem một dòng có liên quan hay không, hãy kiểm tra xem thứ hạng của ma trận không có dòng đó vẫn không thay đổi. Để tính toán xếp hạng ma trận, hãy xem câu hỏi thisthat.

+1

Điều đó về cơ bản giống như một cách rất tốn kém bao thanh toán :-) – Jeroen

+0

Xin lỗi, nhưng một cách khủng khiếp ý tưởng tồi tệ chỉ hoạt động cho một trường hợp đơn giản, với các hàng được nhân rộng. Trong thực tế, nó là TRIVIAL để tạo ra một ma trận cấp bậc 1, có NO hàng hoặc cột sao chép. Do đó, chọn các vectơ hàng ngẫu nhiên U và V, sau đó U '* V có thứ hạng 1. –

2

Câu hỏi của bạn đã là câu trả lời: Để lưu trữ ma trận hạng thấp như vậy một cách hiệu quả, bạn tạo cấu trúc dữ liệu chứa cả hai yếu tố. Nếu yêu cầu nhân ma trận-vector, thì có thể thực hiện từ phải sang trái bằng các sản phẩm vectơ-vector của các yếu tố.

Một ứng dụng của chiến lược và cấu trúc dữ liệu này có thể được tìm thấy trong việc triển khai các phương pháp hạn chế về bộ nhớ Broyden hoặc BFGS.

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