Как хранить большие файлы данных MATLAB во время анализа? - PullRequest
2 голосов
/ 21 января 2011

У меня проблемы с «перегрузкой данных» при обработке облака точек данных в MATLAB. Вот что я сейчас делаю:

  1. Я начинаю с файлов необработанных данных, каждый из которых имеет размер ~ 30 МБ каждый.
  2. Затем я выполняю начальную обработку для них, чтобы извлечь n отдельных объектов и удалить отдаленные точки, которые все объединены в структуру 1 x n, testset, сохраненную в testset.mat (~ 100Mb).

    Пока все хорошо. Теперь все усложняется:

  3. Для каждой точки в каждом объекте в testset я вычислю одну из нескольких функций, которая в итоге станет матрицей некоторого размера (для каждой точки). Размер матрицы и некоторые другие свойства вычислений являются параметрами вычислений. Я сохраняю эти вычисленные объекты в массиве ячеек размером 1 x n, каждая ячейка которого содержит массив матриц для каждой точки.

    Затем я сохраняю этот массив ячеек в файле .mat, где имя указывает параметры, имя используемых тестовых данных и извлеченные типы функций. Например:

    testset_feature_type_A_5x5_0.2x0.2_alpha_3_beta_4.mat

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

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

Итак, мой вопрос:

Есть ли лучший способ сделать это? Может ли кто-нибудь, кто имеет опыт работы с большими наборами данных в MATLAB, предложить способ более эффективного и целостного хранения данных и настроек параметров?

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

Время, затрачиваемое на каждый расчет (около 2 часов), запрещает вычисление данных «на лету».

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Для аналогичной проблемы я создал структуру класса, которая выполняет следующие действия:

  • Каждый объект связан с файлом необработанных данных
  • Для каждого шага обработки существуетсвойство
  • Метод set свойств сохраняет данные в файл (в каталоге с тем же именем, что и файл необработанных данных), сохраняет имя файла и обновляет свойство «status», чтобы указать, что этошаг сделан.
  • Метод get свойств загружает данные, если имя файла было сохранено, и статус показывает «выполнено».
  • Наконец, объекты могут быть сохранены / загружены, так что теперь я могу выполнить некоторую обработку, сохранить объект, затем загрузить его, и я сразу узнаю, как далеко находится определенный набор данных в конвейере обработки.1012 *

Таким образом, единственными данными в памяти являются данные, над которыми в данный момент ведутся работы, и вы можете легко узнать, какой набор данных находится на какой стадии обработки.Кроме того, если вы настроили свои методы для приема массивов объектов, вы можете сделать очень удобную пакетную обработку.

1 голос
/ 21 января 2011

Я не совсем уверен, что это именно то, что вам нужно, но команда позволяет вам хранить несколько переменных в одном файле .mat. Если ваши настройки параметров хранятся, например, в массиве, вы можете сохранить их вместе с набором данных в одном файле .mat. После загрузки файла восстанавливается как набор данных, так и массив с параметрами.

Или вы хотите иметь возможность загружать параметры без загрузки файла? Тогда я лично выбрал бы дешевое решение - иметь второй набор файлов только с параметрами (но с похожими именами файлов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...