Класс: matlab.io.datastore.Partitionable
Пакет: matlab.io.datastore
Раздел datastore
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
файл должен совпадать с именем функции конструктора объектов. Например, если вы хотите, чтобы ваша функция конструктора имела имя MyDatastorePar, то имя .m
файл должен быть MyDatastorePar.m
. The .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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.