Nano Hash - криптовалюты, майнинг, программирование

MATLAB: как создать несколько отображаемых файлов памяти с помощью простого итератора?

У меня есть файлы (> 100), каждый из которых содержит записанные наборы данных, например:

  • файл0: [нет. наборов данных в файле, шт. точек данных для записи1, связанных данных для записи1, нет. точек данных для записи2, связанных данных для записи2, ..., нет. точек данных для записиM, связанных данных для записиM]
  • файл1: [нет. наборов данных в файле, ...] (то же, что и выше)

Все данные вместе могут превышать 20 ГБ, поэтому загружать их все в память нельзя. Следовательно, я хотел бы создать файлы с отображением памяти для каждого из файлов, НО скрывая от «пользователя» сложность базовых данных, например, я хотел бы иметь возможность работать с такими данными:

for i=1:TotalNumberOfRecordings
    recording(i) = recording(i) * 10;        % some stupid data operation
                                             % or even more advanced better:
    recording(i).relatedData = 2000;
end

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

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

entry1: [memoryMappedFileHandle, dataRangeOfRecording]
entry2: [memoryMappedFileHandle, dataRangeOfRecording]

А затем используйте этот список для дальнейшего абстрагирования файлов и записей. Я начал с этого кода:

fileList = getAllFiles(directoryName);
list = []; n = 0;
for file = 1:length(fileList);
   m = memmapfile(fileList(file));
   for numberOfTracesInFile
       n = n+1;
       list = [list; [n, m]];
   end
end

Но я получаю ошибку:

Memmapfile objects cannot be concatenated

Я новичок в MATLAB, так что это, вероятно, плохая идея. Как это сделать лучше? Можно ли создать таблицу с отображением памяти, содержащую несколько файлов?


  • Если я правильно понимаю вашу проблему, вам также нужна глобальная карта all your files (а не только объект memmapfile для каждого файла). Я думаю, что небольшой класс, который содержит эту глобальную карту и возвращает набор запрошенных данных, был бы подходящим способом. Когда вы хотите получить доступ к recording(i), будет ли это указывать на одну точку или на массив? 14.01.2015
  • Это просто сводится к возможности конкатенации объектов memmapfile? Вы пробовали cell массивы? 16.01.2015

Ответы:


1

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

Чтобы ответить на второй вопрос, в MATLAB 2014b появился новый объект datastore, предназначенный для сделать в значительной степени это. По сути, вы создаете объект datastore, который ссылается на ваши файлы, а затем можете извлекать данные из datastore, не беспокоясь о том, в каком файле они находятся. datastore также предназначен для тесной работы с новым mapreduce, которая была введена в то же время, что позволяет легко распараллеливать шаблоны программирования с уменьшением карты и даже связать с Hadoop.

Чтобы ответить на первый вопрос - боюсь, я думаю, что вы нашли свой ответ, который заключается в том, что memmapfile объекты не могут быть объединены, так что нет, не просто. Я думаю, что лучшим подходом будет создание собственного класса, который будет содержать несколько объектов memmapfile в массиве ячеек вместе с информацией о том, какие данные в каком файле, а также какой-то метод getData, который будет извлекать соответствующие данные из соответствующих файл. (В основном это было бы похоже на написание собственного класса datastore, но который работал с файлами, отображаемыми в память, а не с файлами, поэтому вы могли бы скопировать большую часть деталей дизайна и/или реализации из самого datastore).

16.01.2015

2

Как сказал Хорхлер; вы можете поместить объекты memmepfile в массив ячеек:

list = cell(1,10); % preallocate cell
for it = 1:10
 memmapfile_object = memmepfile('/path/to/file');
 list{it} = memmapfile_object;
end
10.02.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..