Класс: matlab.io.datastore. Partitionable
Пакет: matlab.io.datastore
Разделите datastore
subds = partition(ds,n,index)
Входные параметры
ds
Введите datastore
matlab.io. Объект Datastore
Введите datastore, заданный как matlab.io.Datastore
object., Чтобы создать объект Datastore
, смотрите matlab.io.Datastore
.
n
Количество разделов
положительное целое число
Количество разделов, заданных как положительное целое число. Чтобы получить рыночную стоимость для n
, используйте функцию numpartitions
.
Когда вы задаете значение n
, который не находится в области значений разделов, доступных для datastore, метод partition
возвращает пустой datastore. Для получения дополнительной информации смотрите Пустые Хранилища данных. Например, если datastore может содержать до разделов 10
, то вывод метода partition
зависит от значения n
.
Если заданное значение n
меньше чем или равно 10
, то метод partition
возвращает раздел, заданный index
. Например, partition(ds,10,1)
возвращает копию первого раздела исходного datastore ds
.
Если заданное значение n
больше, чем 10
, то метод partition
возвращает пустой datastore. Например, partition(ds,100,11)
возвращает пустой datastore.
Пример 3
Типы данных: double
index
— Индекс
положительное целое число
Индексируйте, заданный как положительное целое число.
Пример 1
Типы данных: double
Примеры
Создание Datastore с поддержкой параллельной обработки
Создайте datastore с поддержкой параллельной обработки и используйте ее, чтобы принести ваши пользовательские или собственные данные в MATLAB®. Затем обработайте данные в параллельном пуле.
Создайте файл определения класса .m
, который содержит код, реализующий ваш пользовательский datastore. Необходимо сохранить этот файл в рабочей папке или в папке, которая находится на пути MATLAB®. Имя файла .m
должно совпасть с именем вашей функции конструктора Object. Например, если вы хотите, чтобы ваша функция конструктора имела имя MyDatastorePar, затем именем файла .m
должен быть MyDatastorePar.m
m. Файл определения класса .m
должен содержать следующие шаги:
Шаг 1: Наследуйтесь классам datastore.
Шаг 2: Задайте конструктора и требуемые методы.
Шаг 3: Задайте свою пользовательскую функцию чтения файла.
В дополнение к этим шагам задайте любые другие свойства или методы, что необходимо обработать и анализировать данные.
%% STEP 1: INHERIT FROM DATASTORE CLASSES
classdef MyDatastorePar < matlab.io.Datastore & ...
matlab.io.datastore.Partitionable
properties(Access = private)
CurrentFileIndex double
FileSet matlab.io.datastore.DsFileSet
end
% Property to support saving, loading, and processing of
% datastore on different file system machines or clusters.
% In addition, define the methods get.AlternateFileSystemRoots()
% and set.AlternateFileSystemRoots() in the methods section.
properties(Dependent)
AlternateFileSystemRoots
end
%% STEP 2: DEFINE THE CONSTRUCTOR AND THE REQUIRED METHODS
methods
% Define your datastore constructor
function myds = MyDatastorePar(location,altRoots)
myds.FileSet = matlab.io.datastore.DsFileSet(location,...
'FileExtensions','.bin', ...
'FileSplitSize',8*1024);
myds.CurrentFileIndex = 1;
if nargin == 2
myds.AlternateFileSystemRoots = altRoots;
end
reset(myds);
end
% Define the hasdata method
function tf = hasdata(myds)
% Return true if more data is available
tf = hasfile(myds.FileSet);
end
% Define the read method
function [data,info] = read(myds)
% Read data and information about the extracted data
% See also: MyFileReader()
if ~hasdata(myds)
msgII = ['Use the reset method to reset the datastore ',...
'to the start of the data.'];
msgIII = ['Before calling the read method, ',...
'check if data is available to read ',...
'by using the hasdata method.'];
error('No more data to read.\n%s\n%s',msgII,msgIII);
end
fileInfoTbl = nextfile(myds.FileSet);
data = MyFileReader(fileInfoTbl);
info.Size = size(data);
info.FileName = fileInfoTbl.FileName;
info.Offset = fileInfoTbl.Offset;
% Update CurrentFileIndex for tracking progress
if fileInfoTbl.Offset + fileInfoTbl.SplitSize >= ...
fileInfoTbl.FileSize
myds.CurrentFileIndex = myds.CurrentFileIndex + 1 ;
end
end
% Define the reset method
function reset(myds)
% Reset to the start of the data
reset(myds.FileSet);
myds.CurrentFileIndex = 1;
end
% Define the partition method
function subds = partition(myds,n,ii)
subds = copy(myds);
subds.FileSet = partition(myds.FileSet,n,ii);
reset(subds);
end
% Getter for AlternateFileSystemRoots property
function altRoots = get.AlternateFileSystemRoots(myds)
altRoots = myds.FileSet.AlternateFileSystemRoots;
end
% Setter for AlternateFileSystemRoots property
function set.AlternateFileSystemRoots(myds,altRoots)
try
% The DsFileSet object manages AlternateFileSystemRoots
% for your datastore
myds.FileSet.AlternateFileSystemRoots = altRoots;
% Reset the datastore
reset(myds);
catch ME
throw(ME);
end
end
end
methods (Hidden = true)
% Define the progress method
function frac = progress(myds)
% Determine percentage of data read from datastore
if hasdata(myds)
frac = (myds.CurrentFileIndex-1)/...
myds.FileSet.NumFiles;
else
frac = 1;
end
end
end
methods(Access = protected)
% If you use the FileSet property in the datastore,
% then you must define the copyElement method. The
% copyElement method allows methods such as readall
% and preview to remain stateless
function dscopy = copyElement(ds)
dscopy = copyElement@matlab.mixin.Copyable(ds);
dscopy.FileSet = copy(ds.FileSet);
end
% Define the maxpartitions method
function n = maxpartitions(myds)
n = maxpartitions(myds.FileSet);
end
end
end
%% STEP 3: IMPLEMENT YOUR CUSTOM FILE READING FUNCTION
function data = MyFileReader(fileInfoTbl)
% create a reader object using FileName
reader = matlab.io.datastore.DsFileReader(fileInfoTbl.FileName);
% seek to the offset
seek(reader,fileInfoTbl.Offset,'Origin','start-of-file');
% read fileInfoTbl.SplitSize amount of data
data = read(reader,fileInfoTbl.SplitSize);
end
Ваш пользовательский datastore теперь готов. Используйте свой пользовательский datastore, чтобы считать и обработать данные в параллельном пуле.
Больше о
Пустые хранилища данных
Пустой datastore является объектом datastore, который не содержит записей. Для пустого datastore ваши пользовательские методы datastore должны удовлетворить эти условия:
hasdata
должен возвратить false
.
read
должен возвратить ошибку.
numpartitions
и maxpartitions
должны возвратить 0
.
partition
должен возвратить пустой datastore.
preview
и readall
должны возвратить пустые данные, который сохраняет невысокие размерности. Например, если метод read
на непустом datastore возвращает данные, который имеет размер 5
-by-15-by-
25
, затем preview
и методы readall
должны возвратить пустые данные размера 0
-by-15-by-
25
.
Невысокие размерности
Размерности кроме первой размерности массива. Для массива размера
5
-by-15-by-
25
, высокой размерностью является 5
, и невысокими размерностями является 15
и 25
.
Советы
В вашей реализации метода
partition
необходимо включать эти шаги.
Прежде, чем создать разделенный datastore subds
, создайте глубокую копию исходного datastore ds
.
В конце метода partition
, сброс разделенный datastore subds
.
Для демонстрационной реализации метода partition
смотрите, Добавляет Поддержка Параллельной обработки.
Когда раздел datastore не содержит читаемой записи, метод
read
должен возвратить пустые данные. Невысокие размерности этого пустые данные должны совпадать с невысокими размерностями метода read
вывод на разделе с читаемыми записями. Это требование гарантирует, что поведение метода readall
совпадает с поведением функции gather
.
Смотрите также
сбор
| matlab.io.datastore. Partitionable. maxpartitions
| matlab.io.datastore. Partitionable. numpartitions
| readall
Введенный в R2017b
Была ли эта тема полезной?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.