Хранилище данных с пользовательским средством чтения файлов
Использовать FileDatastore объект для управления большими коллекциями файлов пользовательского формата, где коллекция не обязательно помещается в память или когда большой файл пользовательского формата не помещается в память. Можно создать FileDatastore с использованием fileDatastore укажите его свойства, а затем импортируйте и обрабатывайте данные с помощью объектных функций.
задает дополнительные параметры и свойства для fds = fileDatastore(location,'ReadFcn',@fcn,Name,Value)fds с использованием одного или нескольких аргументов пары имя-значение. Например, можно указать файлы для включения в хранилище данных в зависимости от их расширений с помощью fileDatastore(location,'ReadFcn',@customreader,'FileExtensions',{'.exts','.extx'}).
location - Файлы или папки для включения в хранилище данныхDsFileSet объектФайлы или папки, включенные в хранилище данных, указанные как путь или DsFileSet объект.
path - укажите путь в виде символьного вектора, массива ячеек символьных векторов, строкового скаляра или строкового массива, содержащего расположение локальных или удаленных файлов или папок.
Локальные файлы или папки - Указать location как локальный путь к файлам или папкам. Если файлы находятся не в текущей папке, то локальный путь должен указывать полный или относительный путь. Файлы в подпапках указанной папки не включаются автоматически в хранилище данных. При указании локального пути можно использовать подстановочный символ (*). Этот символ указывает, что хранилище данных включает все соответствующие файлы или все файлы в соответствующих папках.
Удаленные файлы или папки - Указать location как полный путь к файлам или папкам в виде унифицированного указателя ресурсов (URL) формы hdfs:///path_to_file. Дополнительные сведения см. в разделе Работа с удаленными данными.
DsFileSet object - можно также указать location в качестве DsFileSet объект. Дополнительные сведения см. в разделе matlab.io.datastore.DsFileSet.
Когда location представляет собой папку, хранилище данных включает только поддерживаемые форматы файлов и игнорирует любой другой формат. Чтобы указать пользовательский список расширений файлов для включения в хранилище данных, см. раздел FileExtensions собственность.
Пример: 'file1.ext'
Пример: '../dir/data/file1.ext'
Пример: {'C:\dir\data\file1.exts','C:\dir\data\file2.extx'}
Пример: 'C:\dir\data\*.ext'
@fcn - Функция, считывающая данные файлаФункция, считывающая данные файла, указанные как дескриптор функции.
Сигнатура функции, представляемая дескриптором функции @fcn зависит от значения указанного ReadMode. Функция, считывающая данные файла, должна подтвердить наличие одной из этих подписей.
|
|
|---|---|
'file' (по умолчанию) | Функция должна иметь следующую подпись: function data = MyReadFcn(filename) ... end
|
'partialfile' | Функция должна иметь следующую подпись: function [data,userdata,done] = MyReadFcn(filename,userdata) ... end
|
'byte' | Функция должна иметь следующую подпись: function data = MyReadFcn(filename,offset,size) ... end
|
Значение, указанное в @fcnзадает значение свойства ReadFcn.
Пример: @customreader
Типы данных: function_handle
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
fds = fileDatastore('C:\dir\data','FileExtensions',{'.exts','.extx'})'IncludeSubfolders' - Флаг включения вложенной папкиtrue или false | 0 или 1Флаг включения подпапки, заданный как разделенная запятыми пара, состоящая из 'IncludeSubfolders' и true, false, 0 или 1. Определить true для включения всех файлов и подпапок в каждую папку или false для включения только файлов в каждую папку.
Если не указать 'IncludeSubfolders', тогда значением по умолчанию является false.
Пример: 'IncludeSubfolders',true
Типы данных: logical | double
'FileExtensions' - Расширения файлов пользовательского форматаРасширения файлов пользовательского формата, указанные как разделенная запятыми пара, состоящая из 'FileExtensions' и символьный вектор, массив ячеек символьных векторов, строковый скаляр или строковый массив.
При указании расширения файла fileDatastore создает объект хранилища данных только для файлов с указанным расширением. Можно также создать хранилище данных для файлов без расширений, указав 'FileExtensions' в виде пустого символьного вектора, ''. Если не указать 'FileExtensions', то fileDatastore автоматически включает все файлы в папке.
Пример: 'FileExtensions',''
Пример: 'FileExtensions','.ext'
Пример: 'FileExtensions',{'.exts','.extx'}
Типы данных: char | cell | string
'PreviewFcn' - Функция предварительного просмотра входных данных@ReadFcn (по умолчанию) | дескриптор функцииФункция предварительного просмотра входных данных, заданная как дескриптор функции.
Если функция предварительного просмотра не задана, FileDatastore использует значение, указанное в @ReadFcn в качестве функции предварительного просмотра по умолчанию. Кроме того, можно указать собственную пользовательскую функцию предварительного просмотра данных.
@ReadFcn (по умолчанию) - Использовать ReadFcn к образцу FileDatastore данные. Этот параметр может привести к снижению производительности для tall строительство.
Function handle - Используйте пользовательскую функцию предварительного просмотра для FileDatastore и tall конструкция для выборки входных данных. Использовать PreviewFcn обеспечивает функцию, считывающую только минимально необходимую часть входных данных для предварительного просмотра и построения с высоким уровнем.
Функция, указанная PreviewFcn должны возвращать значения с теми же типами данных, что и ReadFcn возвращает.
Типы данных: function_handle
'ReadMode' - Часть файла для чтения'file' (по умолчанию) | 'partialfile' | 'bytes'Часть файла для чтения, указанная как 'file', 'partialfile', или 'bytes'.
'file' (по умолчанию) | Использовать режим чтения На основе пользовательской функции чтения хранилище данных файла считывает полный файл с каждым вызовом |
'partialfile'
| Использовать режим чтения На основе пользовательской функции чтения хранилище данных файла считывает только часть файла с каждым вызовом В |
'bytes' | Использовать режим чтения
На основе пользовательской функции чтения хранилище данных файла считывает |
Для использования subset и shuffle функции на FileDatastore объект, необходимо установить 'ReadMode' кому 'file'.
Типы данных: char | string
'BlockSize' - Количество байтов для чтенияpositive integerКоличество байтов для чтения с каждым read операция, заданная как положительное целое число.
Чтобы обеспечить возможность распределения нескольких блоков файла между несколькими параллельными работниками MATLAB ®, укажитеBlockSize как положительное целое число, большее, чем 131072 байты (128 килобайт).
Задание или изменение значения BlockSize, сначала необходимо установить ReadMode кому 'bytes'. FileDatastore устанавливает значение по умолчанию BlockSize на основе значения, указанного в ReadMode.
Если ReadMode является 'file' или 'partialfile', то FileDatastore устанавливает значение по умолчанию BlockSize кому inf.
Если ReadMode является 'bytes', то FileDatastore устанавливает значение по умолчанию BlockSize кому 128 мегабайт.
'AlternateFileSystemRoots' - Альтернативные корневые пути файловой системыАльтернативные корневые пути файловой системы, указанные как разделенная запятыми пара, состоящая из 'AlternateFileSystemRoots' и строковый вектор или массив ячеек. Использовать 'AlternateFileSystemRoots' при создании хранилища данных на локальном компьютере, но при необходимости доступа и обработки данных на другом компьютере (возможно, в другой операционной системе). Кроме того, при обработке данных с помощью Toolbox™ Parallel Computing и Server™ MATLAB Parallel, данные хранятся на локальных компьютерах с копией данных, доступных на различных облачных платформах или кластерных машинах, необходимо использовать 'AlternateFileSystemRoots' для связывания корневых путей.
Чтобы связать набор корневых путей, эквивалентных друг другу, укажите 'AlternateFileSystemRoots' в виде строкового вектора. Например,
["Z:\datasets","/mynetwork/datasets"]
Чтобы связать несколько наборов корневых путей, эквивалентных хранилищу данных, укажите 'AlternateFileSystemRoots' как массив ячеек, содержащий несколько строк, где каждая строка представляет набор эквивалентных корневых путей. Укажите каждую строку в массиве ячеек в качестве строкового вектора или массива ячеек в виде символьных векторов. Например:
Определить 'AlternateFileSystemRoots' в виде массива ячеек строковых векторов.
{["Z:\datasets", "/mynetwork/datasets"];...
["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}Либо укажите 'AlternateFileSystemRoots' как массив ячеек массива ячеек символьных векторов.
{{'Z:\datasets','/mynetwork/datasets'};...
{'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}
Значение 'AlternateFileSystemRoots' должны удовлетворять следующим условиям:
Содержит одну или несколько строк, где каждая строка указывает набор эквивалентных корневых путей.
Каждая строка указывает несколько корневых путей, и каждый корневой путь должен содержать не менее двух символов.
Корневые пути уникальны и не являются подпапками друг друга.
Содержит по крайней мере одну запись корневого пути, указывающую на расположение файлов.
Дополнительные сведения см. в разделе Настройка хранилища данных для обработки на различных машинах или кластерах.
Пример: ["Z:\datasets","/mynetwork/datasets"]
Типы данных: string | cell
FileDatastore свойства описывают файлы, связанные с FileDatastore объект. За исключением Files свойство, можно указать значение FileDatastore с использованием аргументов пары имя-значение. Чтобы просмотреть или изменить свойство после создания объекта, используйте точечную нотацию.
Files - Файлы, включенные в хранилище данныхФайлы, включенные в хранилище данных, разрешенные как символьный вектор, массив ячеек символьных векторов, строковый скаляр или строковый массив, где каждый символьный вектор или строка является полным путем к файлу. location аргумент в fileDatastore и datastore функции определяют Files при создании хранилища данных.
Пример: {'C:\dir\data\file1.ext';'C:\dir\data\file2.ext'}
Пример: 'hdfs:///data/*.mat'
Типы данных: char | cell | string
Folders - Папки, используемые для создания хранилища данныхЭто свойство доступно только для чтения.
Папки, используемые для создания хранилища данных, возвращаемого в виде массива ячеек символьных векторов. Массив ячеек ориентирован как вектор-столбец. Каждый вектор символов - это путь к папке, содержащей файлы данных. location аргумент в fileDatastore и datastore функции определяют Folders при создании хранилища данных.
Folders сбрасывается при изменении Files свойство FileDatastore объект.
Типы данных: cell
ReadFcn - Функция, считывающая данные файлаФункция, считывающая данные файла, указанные как дескриптор функции.
Значение, указанное @ fcn, задает значение ReadFcn собственность.
Пример: @MyCustomFileReader
Типы данных: function_handle
UniformRead - Вертикально сцепляемый флагfalse (по умолчанию) | trueЭто свойство доступно только для чтения.
Вертикально сцепляемый флаг, заданный как логический true или false. Укажите значение этого свойства при первом создании FileDatastore объект.
true | Многократное чтение Когда
|
false (по умолчанию) | Многократное чтение Когда
|
Пример: fds = fileDatastore(location,'ReadFcn',@load,'UniformRead',true)
Типы данных: logical | double
SupportedOutputFormats - Список форматов, поддерживаемых для записиЭто свойство доступно только для чтения.
Список форматов, поддерживаемых для записи, возвращаемый в виде вектора строк. Это свойство задает возможные форматы вывода при использовании writeall для записи выходных файлов из хранилища данных.
Типы данных: string
hasdata | Определение доступности данных для чтения |
numpartitions | Количество разделов хранилища данных |
partition | Разделение хранилища данных |
preview | Предварительный просмотр подмножества данных в хранилище данных |
read | Считывание данных в хранилище данных |
readall | Считывание всех данных в хранилище данных |
writeall | Запись хранилища данных в файлы |
reset | Сброс хранилища данных в исходное состояние |
transform | Преобразовать хранилище данных |
combine | Объединение данных из нескольких хранилищ данных |
isPartitionable | Определение возможности разделения хранилища данных |
isShuffleable | Определение возможности тасования хранилища данных |
shuffle | Перетасовка всех данных в хранилище данных |
subset | Создание подмножества хранилища данных или набора файлов |
Создание хранилища данных для файлов в MATLAB ®demos папка, которая имеет .mat расширение.
fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
Создание хранилища данных, содержащего все .mat файлы в MATLAB ®demos папка, указание load для считывания данных файла.
fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
Прочитайте первый файл в хранилище данных, а затем второй файл.
data1 = read(fds); data2 = read(fds);
Одновременное чтение всех файлов в хранилище данных.
readall(fds);
Инициализация массива ячеек для хранения данных и счетчика i.
dataarray = cell(numel(fds.Files), 1); i = 1;
Сбросьте хранилище данных в первый файл и считывайте файлы по одному, пока не останется данных. Назначение данных массиву dataarray.
reset(fds); while hasdata(fds) dataarray{i} = read(fds); i = i+1; end
Можно создать хранилище данных для чтения из большого MAT-файла, который не обязательно помещается в память. Предполагая, что каждый массив в большом MAT-файле помещается в доступную память, создайте хранилище данных для чтения и обработки данных в три этапа:
Запись пользовательской функции чтения, считывающей по одному массиву из MAT-файла.
Настройте параметры функции хранилища данных для выполнения частичного чтения.
Считывайте по одному массиву из MAT-файла.
Создайте пользовательскую функцию, считывающую по одному массиву из MAT-файла. Функция должна иметь подпись, как описано в @ReadFcn аргумент FileDatastore. Сохраните этот файл в рабочей папке или в папке, расположенной по пути MATLAB. В этом примере настраиваемая функция load_variable включен здесь.
type load_variable.mfunction [data,variables,done] = load_variable(filename,variables)
% If variable list is empty,
% create list of variables from the file
if isempty(variables)
variables = who('-file', filename);
end
% Load a variable from the list of variables
data = load(filename, variables{1});
% Remove the newly-read variable from the list
variables(1) = [];
% Move on to the next file if this file is done reading.
done = isempty(variables);
end
Создание и настройка FileDatastore содержа accidents.mat. Укажите параметры хранилища данных для использования 'partialfile' в качестве режима чтения и load_variable в качестве пользовательской функции чтения.
fds = fileDatastore('accidents.mat','ReadMode','partialfile','ReadFcn',@load_variable);
Считывайте первые три переменные из файла с помощью хранилища данных. Файл accidents.mat содержит девять переменных и каждый вызов read возвращает одну переменную. Поэтому, чтобы получить первые три переменные, вызовите функцию считывания три раза.
data = read(fds)
data = struct with fields:
datasources: {3x1 cell}
data = read(fds)
data = struct with fields:
hwycols: 17
data = read(fds)
data = struct with fields:
hwydata: [51x17 double]
Обратите внимание, что образец файла accidents.mat мал и умещается в памяти, но можно ожидать аналогичных результатов для больших MAT-файлов, которые не умещаются в памяти.
Для использования subset и shuffle функции на FileDatastore объект, необходимо установить 'ReadMode' кому 'file'.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.