2012-04-25 29 views
6

Tôi có một mảng thưa thớt có vẻ quá lớn để có hiệu quả trong bộ nhớ (2000x2500000, phao). Tôi có thể hình thành nó thành một lil_array thưa thớt (scipy) nhưng nếu tôi thử đầu ra một cột hoặc hàng nén mảng thưa thớt (A.tocsc(), A.tocsr()) máy của tôi hết bộ nhớ (và cũng có một sự không phù hợp nghiêm trọng giữa dữ liệu trong tệp văn bản 4.4G và mảng lil 12G được chọn - sẽ rất tuyệt khi có định dạng đĩa gần đúng hơn với kích thước dữ liệu thô).Lớn trên mảng đĩa dành cho khối u

Tôi có thể sẽ xử lý các mảng lớn hơn trong tương lai.

Câu hỏi: Cách tốt nhất để xử lý lớn trên mảng đĩa theo cách sao cho tôi có thể sử dụng các chức năng thường xuyên gọn gàng một cách minh bạch. Ví dụ, tổng dọc theo hàng và cột, sản phẩm vector, tối đa, phút, cắt vv?

Có phải pytables là con đường để đi không? là có một lớp trung gian (nhanh) sql-numpy? một bí mật trên mảng đĩa được xây dựng thành numpy?

Trong quá khứ với mảng (hơi nhỏ hơn), tôi luôn chỉ cần lưu trữ các kết quả được tính toán lâu dài vào đĩa. Điều này hoạt động khi các mảng kết thúc là < 4G hoặc lâu hơn nhưng không còn có thể sử dụng được nữa.

+0

Khi bạn chọn mảng của mình, bạn có chắc chắn sử dụng giao thức nhị phân không? Nếu bạn đang sử dụng giao thức văn bản mặc định, thì đây có thể là nguyên nhân của kích thước tệp lớn. – DaveP

Trả lời

2

Tôi thường sử dụng memory-mapped numpy arrays để xử lý ma trận số nhiều gigabyte. Tôi thấy chúng hoạt động thực sự tốt cho mục đích của tôi. Rõ ràng, nếu kích thước của dữ liệu vượt quá số lượng RAM, người ta phải cẩn thận về các mẫu truy cập để tránh thrashing.

+0

Điều này có thể là doable nhưng có vẻ khá không hiệu quả đối với mảng thưa thớt. Có phiên bản thưa thớt không? –

+0

@AnthonyBak: Không phải là tôi biết. Tuy nhiên, một mảng dày đặc 2000x100000 của 'float32' chỉ có kích thước 800MB (cả trên đĩa và bộ nhớ). – NPE

+0

Có, có lỗi đánh máy trong câu hỏi ban đầu của tôi. Nó nên đã nói 2000x2500000. –

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