Tôi có một loạt tệp văn bản lớn (tối đa 1 gig) là đầu ra từ thử nghiệm cần được phân tích bằng Python. Họ sẽ được nạp tốt nhất vào một mảng NumPy 2D, trong đó trình bày những câu hỏi đầu tiên:Tăng dần mảng xây dựng và đo mức sử dụng bộ nhớ
- Là số hàng không rõ ở phần đầu của tải, làm thế nào có thể một mảng NumPy rất lớn được xây dựng một cách hiệu quả nhất, hàng này đến hàng kia?
Chỉ cần thêm hàng vào mảng sẽ không hiệu quả trong điều kiện bộ nhớ, vì hai mảng lớn sẽ cùng tồn tại trong giây lát. Vấn đề tương tự dường như sẽ xảy ra nếu bạn sử dụng numpy.append
. Các chức năng stack
là đầy hứa hẹn, nhưng lý tưởng là tôi muốn phát triển mảng tại chỗ.
Điều này dẫn đến câu hỏi thứ hai:
- cách tốt nhất để quan sát việc sử dụng bộ nhớ của một chương trình Python mà rất nhiều sử dụng mảng NumPy là gì?
Để nghiên cứu vấn đề trên, tôi đã sử dụng các công cụ định dạng bộ nhớ thông thường - heapy và pympler - nhưng chỉ nhận được kích thước của các đối tượng mảng ngoài (80 byte) chứ không phải dữ liệu mà chúng chứa. Ngoài việc đo lường thô bao nhiêu bộ nhớ mà quá trình Python đang sử dụng, làm cách nào tôi có thể nhận được kích thước "đầy đủ" của các mảng khi chúng phát triển?
Chi tiết địa phương: OSX 10.6, Python 2.6, nhưng các giải pháp chung đều được chào đón.
Cảm ơn tất cả. Với kích thước của tập tin, tôi đã miễn cưỡng thực hiện một bước đầu tiên chỉ để đếm dòng, nhưng nó có vẻ là cách dễ nhất và hiệu quả nhất để giải quyết vấn đề bộ nhớ. –
Tôi đã có một đồng nghiệp hỏi một câu hỏi tương tự gần đây, và tôi đã đưa ra một khả năng khác có thể cứu bạn khỏi lần đầu tiên. Nếu bạn biết kích thước gần đúng của một "phần tử" trong tệp, bạn có thể chia nó thành kích thước tệp. Thêm một số đệm cho an toàn, và sau đó bạn có thể ghi vào toàn bộ bộ nhớ. Để ẩn thêm, chưa được khởi tạo, bạn có thể sử dụng chế độ xem chỉ các phần tử có dữ liệu. Bạn sẽ cần phải chắc chắn rằng bạn không đi qua. Nó không hoàn hảo, nhưng nếu tập tin của bạn đọc chậm, và dữ liệu của bạn được đặt ra một cách nhất quán, nó có thể hoạt động. – AFoglia