Работа с большим файлом CSV в MATLAB

Мне приходится работать с большим файлом CSV, до 2 ГБ. В частности, я должен загрузить все эти данные в базу данных mySQL, но прежде чем мне нужно будет сделать несколько расчетов, поэтому мне нужно сделать все это в MATLAB (также мой руководитель хочет сделать в MATLAB, потому что он знаком только с МАТЛАБ :( ).

Любая идея, как я могу обрабатывать эти большие файлы?


person OHLÁLÁ    schedule 18.04.2011    source источник
comment
Какой расчет? Нужны ли ему данные из полного файла или вы могли бы обработать его построчно?   -  person Ashish Uthama    schedule 18.04.2011
comment
Описание формата вашего файла было бы наиболее полезным.   -  person gnovice    schedule 18.04.2011
comment
@iUngi: Все CSV означает, что имеющиеся у вас значения разделены запятыми, но это мало помогает. Например, у вас могут быть смеси строк, целых чисел, чисел с плавающей запятой и т. д. и разное их количество в строке файла. Похоже, вы уже получили нужный вам ответ (поскольку вы отметили его как принятый), но в будущем, пожалуйста, имейте в виду, что у вас будет больше шансов получить хорошие ответы, если вы сделаете свой вопрос максимально ясным и подробным.   -  person gnovice    schedule 18.04.2011
comment
К счастью, у меня нет строк в файле, только целые числа или числа с плавающей запятой, первая строка — это имя полей.   -  person OHLÁLÁ    schedule 18.04.2011


Ответы (2)


Вероятно, вам следует использовать textscan для чтения данных по частям, а затем обработать. Это, вероятно, будет более эффективным, чем чтение по одной строке за раз. Например, если у вас есть 3 столбца данных, вы можете сделать:

filename = 'fname.csv';
[fh, errMsg] = fopen( filename, 'rt' );
if fh == -1, error( 'couldn''t open file: %s: %s', filename, errMsg ); end
N  = 100; % read 100 rows at a time
while ~feof( fh )
  c  = textscan( fh, '%f %f %f', N, 'Delimiter', ',' );
  doStuff(c);
end

РЕДАКТИРОВАТЬ

В наши дни (R2014b и более поздние версии) проще и, вероятно, эффективнее использовать datastore .

person Edric    schedule 18.04.2011
comment
+1. Могу ли я уговорить вас включить более подробную информацию в сообщение об ошибке? Подробная диагностика IM(NS)HO значительно упрощает отладку и является хорошей привычкой для чтения примеров кода. file = 'fname.csv'; [fh,errMsg] = fopen(file, 'rt'); if fh == -1; error('Couldn''t open file %s: %s', file, errMsg); end; ... fclose(fh); - person Andrew Janke; 18.04.2011

В этом элементе обмена файлами есть хороший совет по работе с большими наборами данных в MATLAB.

Конкретные темы включают:
* Понимание максимального размера массива и рабочей области в MATLAB
* Использование недокументированных функций для отображения доступной памяти в MATLAB
* Установка переключателя 3 ГБ в Windows XP для получения на 1 ГБ больше память для MATLAB
* Использование textscan для чтения больших текстовых файлов и функция сопоставления памяти для чтения больших двоичных файлов

person Richie Cotton    schedule 18.04.2011