Tôi chạy phiên bản Matlab R2011b và R phiên bản 2.13.1 trên Linux Mint v12 với RAM 16 GB.văn bản có thể trong Matlab sử dụng RAM quá mức so với phương pháp tương tự trong R
Tôi có tệp csv. 5 hàng đầu tiên (và tiêu đề) là:
#RIC,Date[G],Time[G],GMT Offset,Type,Price,Volume
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.66,300
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.65,1000
DAEG.OQ,07-JUL-2011,15:10:03.464,-4,Trade,1.65,3180
Tệp lớn (khoảng 900MB). Với sự kết hợp của nhân vật và dữ liệu số, người ta có thể đọc tập tin này vào matlab như sau:
fid1 = fopen('/home/MyUserName/Temp/X.csv');
D = textscan(fid1, '%s%s%s%f%s%f%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);
Mặc dù tập tin là 900MB, khi chạy đoạn mã trên, System Monitor chỉ ra việc sử dụng RAM của tôi nhảy từ khoảng 2GB đến 10GB . Tồi tệ hơn, nếu tôi thử quy trình tương tự này với tệp csv lớn hơn một chút (khoảng 1,2 GB), RAM của tôi tối đa là 16 GB và Matlab không bao giờ quản lý để đọc xong dữ liệu (chỉ bị kẹt trong chế độ "bận").
Nếu tôi muốn đọc cùng một tập tin vào R, tôi có thể sử dụng:
D <- read.csv("/home/MyUserName/Temp/X.csv", stringsAsFactors=FALSE)
này có lâu hơn một chút so với Matlab, nhưng màn hình hệ thống chỉ sử dụng RAM của tôi chỉ nhảy từ 2GB lên 3.3GB (nhiều hợp lý hơn cho kích thước tập tin gốc).
Câu hỏi của tôi có hai phần:
1) Tại sao là textscan
như một con heo bộ nhớ trong kịch bản này?
2) Có cách tiếp cận nào khác mà tôi có thể sử dụng để nhận tệp 1.2v csv của loại này vào Matlab trên hệ thống của mình mà không cần tối đa RAM không?
CHỈNH SỬA: Chỉ cần làm rõ, tôi tò mò xem liệu có tồn tại giải pháp chỉ có MATLAB hay không, tức là tôi không quan tâm đến giải pháp liên quan đến việc sử dụng ngôn ngữ khác để chia nhỏ tệp csv thành khối (vì đây là những gì tôi đã làm). Xin lỗi Trav1s, tôi nên làm điều này rõ ràng ngay từ đầu.
Cảm ơn Andrew, đây có vẻ là câu trả lời hay cho câu hỏi, nhưng tôi sẽ không có cơ hội đọc chi tiết cho đến ngày mai (tôi đang làm việc). Xin lỗi về sự chậm trễ. –
Andrew, câu trả lời tốt 1, cảm ơn bạn. –