Класс: matlab.io.datastore.Partitionable
Пакет: matlab.io.datastore
Разделение хранилища данных
ds - Хранилище входных данныхmatlab.io.Datastore объектХранилище входных данных, указанное как matlab.io.Datastore объект. Создание Datastore объект, см. matlab.io.Datastore.
n - Количество разделовЧисло разделов, указанное как положительное целое число. Чтобы получить разумное значение для n, используйте numpartitions функция.
При указании значения n , который не входит в диапазон разделов, доступных для хранилища данных, partition возвращает пустое хранилище данных. Дополнительные сведения см. в разделе Пустые хранилища данных. Например, если хранилище данных может содержать до 10 разделы, затем выходные данные partition метод зависит от значения n.
Если указанное значение n меньше или равно 10, то partition возвращает раздел, указанный index. Например, partition(ds,10,1) возвращает копию первого раздела исходного хранилища данных ds.
Если указанное значение n больше, чем 10, то partition возвращает пустое хранилище данных. Например, partition(ds,100,11) возвращает пустое хранилище данных.
Пример: 3
Типы данных: double
index - ИндексИндекс, заданный как положительное целое число.
Пример: 1
Типы данных: double
Создайте хранилище данных с поддержкой параллельной обработки и используйте его для переноса пользовательских или собственных данных в MATLAB ®. Затем обработайте данные в параллельном пуле.
Создать .m файл определения класса, содержащий код, реализующий пользовательское хранилище данных. Этот файл необходимо сохранить в рабочей папке или в папке по пути MATLAB ®. Имя .m файл должен совпадать с именем функции конструктора объекта. Например, если необходимо, чтобы функция конструктора имела имя MyDatasturePar, то имя .m файл должен быть MyDatastorePar.m. .m файл определения класса должен содержать следующие шаги:
Шаг 1. Наследование из классов хранилища данных.
Шаг 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
Пользовательское хранилище данных готово. Пользовательское хранилище данных используется для чтения и обработки данных в параллельном пуле.
Пустое хранилище данных - это объект хранилища данных, не содержащий записей. Для пустого хранилища данных пользовательские методы хранилища данных должны удовлетворять следующим условиям:
hasdata должен вернуться false.
read должен возвращать ошибку.
numpartitions и maxpartitions должен вернуться 0.
partition должен возвращать пустое хранилище данных.
preview и readall должен возвращать пустые данные, сохраняющие невысокие размеры. Например, если read метод в непустом хранилище данных возвращает данные, имеющие размер 5около-15около-25, то preview и readall методы должны возвращать пустые данные размера 0около-15около-25.
Размеры, отличные от первого размера массива. Для массива размера 5около-15около-25, высокий размер 5 и невысокие размеры 15 и 25.
В вашей реализации partition , необходимо включить эти шаги.
Перед созданием секционированного хранилища данных subds, создание глубокой копии исходного хранилища данных ds.
В конце partition метод, сброс секционированного хранилища данных subds.
Для выборочной реализации partition см. раздел Добавление поддержки параллельной обработки.
Если раздел хранилища данных не содержит читаемой записи, read метод должен возвращать пустые данные. Неталловые измерения этих пустых данных должны соответствовать неталловым измерениям read вывод способа на раздел с читаемыми записями. Это требование гарантирует, что поведение readall метод соответствует поведению gather функция.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.