Datastore с пользовательским средством чтения файлов
Используйте FileDatastore
объект управлять большим количеством пользовательских файлов формата, где набор не обязательно умещается в памяти или когда большой пользовательский файл формата не умещается в памяти. Можно создать FileDatastore
объект с помощью fileDatastore
функционируйте, задайте его свойства, и затем импортируйте и обработайте данные, используя функции объекта.
задает дополнительные параметры и свойства для fds
= fileDatastore(location
,'ReadFcn',@fcn
,Name,Value
)fds
использование одного или нескольких аргументов пары "имя-значение". Например, можно задать который файлы включать в datastore в зависимости от их расширений с fileDatastore(location,'ReadFcn',@customreader,'FileExtensions',{'.exts','.extx'})
.
location
— Файлы или папки, чтобы включать в datastoreDsFileSet
объектФайлы или папки, включенные в datastore в виде пути или DsFileSet
объект.
path Задайте путь как вектор символов, массив ячеек из символьных векторов, строковый скаляр или массив строк, содержа местоположение файлов или папок, которые являются локальными или удаленными.
Локальные файлы или папки — Задают location
как локальный путь к файлам или папкам. Если файлы не находятся в текущей папке, то локальный путь должен задать полные или относительные пути. Файлы в подпапках заданной папки автоматически не включены в datastore. Можно использовать подстановочный символ (*) при определении локального пути. Этот символ указывает, что datastore включает все файлы соответствия или все файлы в соответствующих папках.
Удаленные файлы или папки — Задают location
быть полными путями файлов или папок как универсальный локатор ресурса (URL) формы hdfs:///path_to_file
. Для получения дополнительной информации смотрите работу с Удаленными данными.
DsFileSet
объект — также можно задать location
как DsFileSet
объект. Для получения дополнительной информации смотрите matlab.io.datastore.DsFileSet
.
Когда location
представляет папку, datastore включает только поддерживаемые форматы файлов и игнорирует любой другой формат. Чтобы задать пользовательский список расширений файла, чтобы включать в ваш datastore, смотрите 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
ложь
, 0, или 1. Задайте true
включать все файлы и подпапки в каждой папке или false
включать только файлы в каждой папке.
Если вы не задаете 'IncludeSubfolders'
, затем значением по умолчанию является false
.
Пример: 'IncludeSubfolders',true
Типы данных: логический |
double
'FileExtensions'
— Пользовательские расширения файла форматаПользовательские расширения файла формата в виде разделенной запятой пары, состоящей из 'FileExtensions'
и вектор символов, массив ячеек из символьных векторов, строковый скаляр или массив строк.
Когда вы задаете расширение файла, fileDatastore
функция создает объект datastore только для файлов с заданным расширением. Также можно создать datastore для файлов без любых расширений путем определения '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' (значение по умолчанию) | Используйте режим чтения На основе вашей пользовательской функции чтения datastore файла читает полный файл с каждым вызовом |
'partialfile'
| Используйте режим чтения На основе вашей пользовательской функции чтения datastore файла читает только фрагмент файла с каждым вызовом В |
'bytes' | Используйте режим чтения
На основе вашей пользовательской функции чтения datastore файла читает |
Использовать subset
и shuffle
функции на FileDatastore
объект, необходимо установить 'ReadMode'
к 'file'
.
Типы данных: char |
string
'BlockSize'
— Количество байтов, чтобы читатьpositive integer
Количество байтов, чтобы читать с каждым read
операция в виде положительного целого числа.
Чтобы гарантировать, что можно распределить несколько блоков файла через несколько параллельных рабочих MATLAB®, задайте BlockSize
как положительное целое число, больше, чем 131072
байты (128
килобайты).
Задать или изменить значение BlockSize
, необходимо сначала установить ReadMode
к 'bytes'
fileDatastore
устанавливает значение по умолчанию BlockSize
на основе значения, заданного в ReadMode
.
Если ReadMode
isfile
или 'partialfile'
, затем FileDatastore
устанавливает BlockSize
по умолчанию к
inf
.
Если ReadMode
'bytes'
, затем FileDatastore
устанавливает BlockSize
по умолчанию к
128
мегабайты.
'AlternateFileSystemRoots'
— Альтернативные пути к корню файловой системыАльтернативные пути к корню файловой системы в виде разделенной запятой пары, состоящей из 'AlternateFileSystemRoots'
и вектор строки или массив ячеек. Используйте 'AlternateFileSystemRoots'
когда вы создаете datastore на локальной машине, но должны получить доступ и обработать данные на другой машине (возможно различной операционной системы). Кроме того, когда обработка данных с помощью Parallel Computing Toolbox™ и MATLAB Parallel Server™ и данных хранится на локальных машинах с копией доступных данных в облаке другой платформы или кластерных машинах, необходимо использовать 'AlternateFileSystemRoots'
сопоставлять корневые пути.
Чтобы сопоставить набор корневых путей, которые эквивалентны друг другу, задайте 'AlternateFileSystemRoots'
как вектор строки. Например,
["Z:\datasets","/mynetwork/datasets"]
Чтобы сопоставить несколько наборов корневых путей, которые эквивалентны для datastore, задайте 'AlternateFileSystemRoots'
как массив ячеек, содержащий несколько строк, где каждая строка представляет набор эквивалентных корневых путей. Задайте каждую строку в массиве ячеек или как вектор строки или как массив ячеек из символьных векторов. Например:
Задайте 'AlternateFileSystemRoots'
как массив ячеек векторов строки.
{["Z:\datasets", "/mynetwork/datasets"];... ["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}
В качестве альтернативы задайте 'AlternateFileSystemRoots'
как массив ячеек массива ячеек из символьных векторов.
{{'Z:\datasets','/mynetwork/datasets'};... {'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}
Значение 'AlternateFileSystemRoots'
должен удовлетворить этим условиям:
Содержит одну или несколько строк, где каждая строка задает набор эквивалентных корневых путей.
Каждая строка задает несколько корневых путей, и каждый корневой путь должен содержать по крайней мере два символа.
Корневые пути уникальны и не являются подпапками друг друга.
Содержит по крайней мере одну корневую запись пути, которая указывает на местоположение файлов.
Для получения дополнительной информации смотрите Настроенный Datastore для Обработки на Различных Машинах или Кластерах.
Пример: ["Z:\datasets","/mynetwork/datasets"]
Типы данных: string
| cell
FileDatastore
свойства описывают файлы, сопоставленные с FileDatastore
объект. За исключением Files
свойство, можно задать значение FileDatastore
аргументы пары "имя-значение" использования свойств. Чтобы просмотреть или изменить свойство после создания объекта, используйте запись через точку.
Files
— Файлы включены в datastoreФайлы включали в datastore, разрешенный как вектор символов, массив ячеек из символьных векторов, строковый скаляр или массив строк, где каждый вектор символов или строка являются полным путем к файлу. location
аргумент в fileDatastore
и datastore
функции задают Files
когда datastore создается.
Пример: {'C:\dir\data\file1.ext';'C:\dir\data\file2.ext'}
Пример: 'hdfs:///data/*.mat'
Типы данных: char |
cell
| string
Folders
— Папки раньше создавали datastoreЭто свойство доступно только для чтения.
Папки, используемые, чтобы создать datastore, возвратились как массив ячеек из символьных векторов. Массив ячеек ориентирован как вектор-столбец. Каждый вектор символов является путем к папке, которая содержит файлы данных. location
аргумент в fileDatastore
и datastore
функции задают Folders
когда datastore создается.
Folders
свойство сбрасывается, когда вы изменяете Files
свойство FileDatastore
объект.
Типы данных: cell
ReadFcn
— Функция, которая считывает данные о файлеФункция, которая считывает данные о файле в виде указателя на функцию.
Значение, заданное @fcn, устанавливает значение ReadFcn
свойство.
Пример: @MyCustomFileReader
Типы данных: function_handle
UniformRead
— Вертикально concatenateable флагfalse
(значение по умолчанию) | true
Это свойство доступно только для чтения.
Вертикально concatenateable флаг в виде логического true
или false
. Задайте значение этого свойства, когда вы сначала создадите FileDatastore
объект.
true | Несколько чтений Когда
|
false (значение по умолчанию) | Несколько чтений Когда
|
Пример: fds = fileDatastore(location,'ReadFcn',@load,'UniformRead',true)
Типы данных: логический |
double
SupportedOutputFormats
— Список форматов поддержан для записиЭто свойство доступно только для чтения.
Список форматов поддержан для записи, возвращенный как вектор-строка из строк. Это свойство задает возможные выходные форматы при использовании writeall
записать выходные файлы из datastore.
Типы данных: string
hasdata | Определите, доступны ли данные для чтения |
numpartitions | Количество разделов datastore |
partition | Разделите datastore |
preview | Подмножество предварительного просмотра данных в datastore |
read | Считайте данные в datastore |
readall | Считывайте все данные в datastore |
writeall | Запишите datastore в файлы |
reset | Сброс Datastore к начальному состоянию |
transform | Преобразуйте datastore |
combine | Объедините данные от нескольких datastores |
isPartitionable | Определите, partitionable ли datastore |
isShuffleable | Определите, shuffleable ли datastore |
shuffle | Переставьте все данные в datastore |
subset | Создайте подмножество datastore или установленный на файл |
Создайте datastore для файлов в MATLAB® demos
папка, которые имеют .mat
расширение.
fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
Создайте datastore, содержащий весь .mat
файлы в MATLAB® demos
папка, задавая load
функционируйте, чтобы считать данные о файле.
fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
Считайте первый файл в datastore, и затем считайте второй файл.
data1 = read(fds); data2 = read(fds);
Считайте все файлы в datastore одновременно.
readall(fds);
Инициализируйте массив ячеек, чтобы содержать данные и противостоять i
.
dataarray = cell(numel(fds.Files), 1); i = 1;
Сбросьте datastore к первому файлу и считайте файлы по одному, пока не будет никаких оставленных данных. Присвойте данные массиву dataarray
.
reset(fds); while hasdata(fds) dataarray{i} = read(fds); i = i+1; end
Можно создать datastore, чтобы читать из большого MAT-файла, который не обязательно умещается в памяти. При предположении, что каждый массив в большом MAT-файле помещается в доступную память, создайте datastore, чтобы считать и обработать данные на трех шагах:
Запишите пользовательскую функцию чтения, которая читает один массив за один раз из MAT-файла.
Настройте параметры функции datastore, чтобы выполнить частичные чтения.
Считайте один массив за один раз из MAT-файла.
Запишите пользовательскую функцию, которая читает один массив во время из MAT-файла. Функция должна иметь подпись как описано в @ReadFcn
аргумент FileDatastore
. Сохраните этот файл в своей рабочей папке или в папке, которая находится на пути MATLAB. В данном примере пользовательский функциональный load_variable
включен здесь.
type load_variable.m
function [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
. Задайте параметры datastore, чтобы использовать 'partialfile'
как режим чтения и load_variable
как пользовательская функция чтения.
fds = fileDatastore('accidents.mat','ReadMode','partialfile','ReadFcn',@load_variable);
Считайте первые три переменные из файла с помощью datastore. Файл 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.