Класс: matlab.io.datastore.
Пакет: matlab.io.datastore
Разделите datastore
subds = partition(ds,n,index)
ds
Введите datastorematlab.io.Datastore
Введите datastore, заданный как объект matlab.io.Datastore
. Чтобы создать объект 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 с поддержкой параллельной обработки и используйте ее, чтобы принести ваши пользовательские или собственные данные в MATLAB®. Затем обработайте данные в параллельном пуле.
Создайте файл определения класса .m
, который содержит код, реализующий ваш пользовательский datastore. Необходимо сохранить этот файл в рабочей папке или в папке, которая находится на пути MATLAB®. Имя файла .m
должно совпасть с именем вашей функции конструктора Object. Например, если вы хотите, чтобы ваша функция конструктора имела имя MyDatastorePar, затем именем файла .m
должен быть MyDatastorePar.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
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.