Доступ к большим наборам данных и / или их хранение
В данный момент я имею дело с большим количеством наборов данных с плавающей запятой / двойных данных, которые будут использоваться для расчета. У меня есть набор файлов для сравнения данных A с данными B, и я хотел бы вычислить евклидово подобие расстояния / косинуса. Данные IE. Точка 1 перебирает точки B данных, чтобы найти ближайшего соседа.
Данные приведены в текстовом файле - никаких проблем с этим. Что было бы идеальным способом хранения / чтения информации?
Я должен был бы повторить данные B для всех точек в данных A. Данные должны храниться как числа с плавающей запятой. Каждая точка данных может иметь измерения. Файл может содержать до 2 миллионов поплавков.
Должен ли я использовать:
- Постоянное чтение файла Data B и анализ строки (я чувствую, что это крайне неэффективно)
- Хранение данных в списке (массив с плавающей точкой)
- Использование Memory-Map IO?
- HashMap (я относительно новичок в HashMap, они говорят, что позиции коллекции могут меняться со временем, если я просто перебираю без изменений, позиции изменятся?)
2 ответа
2M поплавков не так уж много, будет очень хорошо поместить их всех в список. Один список для A, один для B. Если A и B многомерны, float[][] просто отлично. Если вы обнаружите, что вам не хватает памяти, попробуйте сначала загрузить всю B, но только одну точку данных из A за раз.
Основное решение является лучшим: просто float[][]
, Это почти наверняка самое эффективное с точки зрения памяти и самое быстрое решение, и очень простое.