hdf5 и ndarray метод добавления / эффективного времени для больших массивов данных - PullRequest
3 голосов
/ 19 марта 2011

Фон

У меня есть k n-мерных временных рядов, каждый из которых представлен в виде массива m x (n + 1), содержащего значения с плавающей запятой (n столбцов плюс один, представляющий дату).

Пример:

k (около 4 миллионов) временных рядов, которые выглядят как

20100101    0.12    0.34    0.45    ...
20100105    0.45    0.43    0.21    ...
...         ...     ...     ... 

Каждый день я хочу добавить для подмножества наборов данных (one hd5f.

Вопрос

Каков наиболее эффективный по времени подход для добавления строк в наборы данных?

Ввод - это файл CSV, который выглядит как

key1, key2, key3, key4, date, value1, value2, ... 

, где дата уникальна для конкретного файла и может быть проигнорирована. У меня около 4 миллионов наборов данных. Проблема в том, что мне нужно найти ключ, получить полный массив, изменить его размер, добавить строку и снова сохранить массив. Общий размер файла hd5f составляет около 100 ГБ. Любая идея, как ускорить это? Я думаю, мы можем согласиться с тем, что использование SQLite или чего-то подобного не работает - как только у меня будут все данные, средний набор данных будет иметь более 1 миллиона элементов на 4 миллиона наборов данных.

Спасибо!

1 Ответ

0 голосов
/ 19 марта 2011

Вы смотрели на PyTables ? Это иерархическая база данных, построенная на основе библиотеки HDF5.

У него есть несколько типов массивов, но тип "таблица" звучит так, как будто он будет работать для вашего формата данных. В основном это дисковая версия массива записей NumPy, где каждый столбец может иметь уникальный тип данных. Таблицы имеют метод добавления, который может легко добавлять дополнительные строки.

Что касается загрузки данных из CSV-файлов, numpy.loadtxt довольно быстрый. Он загрузит файл в память в виде массива записей NumPy.

...