MATLAB: преобразование большого текстового файла в матрицу - PullRequest
0 голосов
/ 05 мая 2018

Мне нужно прочитать текстовый файл в MATLAB, содержащий 436 значений с плавающей запятой в каждой строке (размер текстового файла составляет 25 ГБ, чтобы вы могли оценить количество строк), а затем преобразовать его в матрицу, чтобы я мог выполнить транспонирование. Как это сделать? Не будет ли спецификатор формата слишком длинным?

1 Ответ

0 голосов
/ 05 мая 2018

Предположим, что числа с плавающей точкой в ​​вашем файле записаны в таком формате, что у вас есть 15 цифр после числа с плавающей запятой. Таким образом, у нас есть 17 символов для каждого числа. Затем, давайте также предположим, что они разделены символом , и что у нас есть \n в конце каждой строки, так что у нас будет всего 436*18=7848 символов, что предполагает, что символы ascii будут использовать один байт каждый. Затем ваш файл использует около 25G памяти, так что вы можете сказать, что у вас есть (25*2^30)/7848=3.6041e+06 строк (при использовании 2 ^ 30 байт в гигабайте, масштаб примерно такой же, если вы предпочитаете определение как 10 ^ 9 байт) `.

Таким образом, матрица размером 4e6, 436 (я предполагаю, что верхняя граница размера вашей матрицы будет намного больше), если предположить, что каждое число с плавающей запятой занимает 4 байт, примерно займет 6.48G. В этом нет ничего сумасшедшего, и вы можете найти этот объем непрерывной памяти, выделяемый при чтении матрицы с помощью функции load, если у вас достаточно памяти на вашей машине. В данный момент у меня есть 8G, а rand(4*1e6,436) выделяет желаемый объем памяти, хотя в итоге он использует пространство подкачки и замедляется. Я предполагаю, что load сам по себе будет иметь некоторое количество служебной информации, но если у вас есть 16G ОЗУ (что не является сумасшедшим в наши дни), вы можете спокойно перейти с load.

Теперь, если вы думаете, что не найдете столько смежной памяти, я предлагаю вам просто разделить ваш файл на куски, такие как 10 матрицы, и загрузить и транспонировать их отдельно. То, как вы это сделаете, зависит от вас и от приложения, а также от того, есть ли в данных какие-либо шаблоны разреженности или нет. Кроме того, убедитесь (если вам не нужна дополнительная точность), что вы используете точность с плавающей запятой.

...