Доступ к большим наборам данных и / или их хранение

В данный момент я имею дело с большим количеством наборов данных с плавающей запятой / двойных данных, которые будут использоваться для расчета. У меня есть набор файлов для сравнения данных A с данными B, и я хотел бы вычислить евклидово подобие расстояния / косинуса. Данные IE. Точка 1 перебирает точки B данных, чтобы найти ближайшего соседа.

Данные приведены в текстовом файле - никаких проблем с этим. Что было бы идеальным способом хранения / чтения информации?

Я должен был бы повторить данные B для всех точек в данных A. Данные должны храниться как числа с плавающей запятой. Каждая точка данных может иметь измерения. Файл может содержать до 2 миллионов поплавков.

Должен ли я использовать:

  1. Постоянное чтение файла Data B и анализ строки (я чувствую, что это крайне неэффективно)
  2. Хранение данных в списке (массив с плавающей точкой)
  3. Использование Memory-Map IO?
  4. HashMap (я относительно новичок в HashMap, они говорят, что позиции коллекции могут меняться со временем, если я просто перебираю без изменений, позиции изменятся?)

2 ответа

Решение

2M поплавков не так уж много, будет очень хорошо поместить их всех в список. Один список для A, один для B. Если A и B многомерны, float[][] просто отлично. Если вы обнаружите, что вам не хватает памяти, попробуйте сначала загрузить всю B, но только одну точку данных из A за раз.

Основное решение является лучшим: просто float[][], Это почти наверняка самое эффективное с точки зрения памяти и самое быстрое решение, и очень простое.

Другие вопросы по тегам