Запись данных в представитель ансамбля datastore
writeToLastMemberRead(
запишет указанные данные один или несколько ensemble
,Name,Value
)Name,Value
сопоставить аргументы с последним читаемым представителем ансамбля datastore. Последний считанный представитель является представителем, к которой последний раз обращался с помощью read
команда. (См. «Ансамбли данных» для мониторинга условия и прогнозирующего обслуживания.) Каждый Name
должен совпадать с записью в свойстве ensemble.DataVariables
. Функция запишет соответствующее Value
в ансамбль datastore.
Если ensemble
является simulationEnsembleDatastore
объект, затем writeToLastMemberRead
записывает данные в MAT-файл, соответствующий последнему считанному представителю ансамбля (ensemble.LastMemberRead
).
Если ensemble
является fileEnsembleDatastore
объект, затем writeToLastMemberRead
использует функцию, идентифицированную свойством ensemble.WriteToMemberFcn
для записи данных. Если это свойство не определено, то writeToLastMemberRead
генерирует ошибку.
Этот синтаксис недоступен, когда ReadSize
свойство ensemble
больше 1. Использование writeToLastMemberRead(ensemble,data)
вместо этого.
Можно обработать данные в ансамблевом datastore и добавить производные переменные к представителям ансамбля. В данном примере обрабатывайте значение переменных, чтобы вычислить метку, которая указывает, содержит ли представитель ансамбля данные, полученные с присутствующим отказом. Затем вы добавляете эту метку в ансамбль.
В данном примере используйте следующий код для создания simulationEnsembleDatastore
объект использует данные, ранее сгенерированные запуском модели Simulink ® при различных значениях отказа. (См. generateSimulationEnsemble
.) Ансамбль включает данные моделирования для пяти различных значений параметра модели, ToothFaultGain
. Модель была сконфигурирована, чтобы записать данные моделирования в переменную с именем logsout
в MAT-файлах, которые хранятся в данном примере в simEnsData.zip
. Из-за объема данных unzip
операция может занять минуту или две.
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble = simulationEnsembleDatastore with properties: DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [5x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]
Считайте данные от первого представителя ансамбля. Программа определяет, какой ансамбль является первым представителем, и обновляет свойство ensemble.LastMemberRead
для отражения имени соответствующего файла.
data = read(ensemble)
data=1×5 table
PMSignalLogName SimulationInput SimulationMetadata Tacho Vibration
_______________ ______________________________ _________________________________ ___________________ ___________________
{'logsout'} {1x1 Simulink.SimulationInput} {1x1 Simulink.SimulationMetadata} {20202x1 timetable} {20202x1 timetable}
По умолчанию все переменные, хранящиеся в данных ансамбля, обозначаются как SelectedVariables
. Поэтому строка возвращаемой таблицы включает все переменные ансамбля, включая переменную SimulationInput
, который содержит Simulink.SimulationInput
объект, который сконфигурировал симуляцию для этого представителя ансамбля. Этот объект включает в себя ToothFaultGain
значение, используемое для представителя ансамбля, сохраненное в структуре данных в его Variables
свойство. Исследуйте это значение. (Для получения дополнительной информации о том, как сохранено строение симуляции, см. Simulink.SimulationInput
(Simulink).)
data.SimulationInput{1}
ans = SimulationInput with properties: ModelName: 'TransmissionCasingSimplified' InitialState: [0x0 Simulink.op.ModelOperatingPoint] ExternalInput: [] ModelParameters: [0x0 Simulink.Simulation.ModelParameter] BlockParameters: [0x0 Simulink.Simulation.BlockParameter] Variables: [1x1 Simulink.Simulation.Variable] PreSimFcn: [] PostSimFcn: [] UserString: ''
Inputvars = data.SimulationInput{1}.Variables; Inputvars.Name
ans = 'ToothFaultGain'
Inputvars.Value
ans = -2
Предположим, что вы хотите преобразовать ToothFaultGain
значения для каждого ансамбля представителя в двоичный индикатор наличия или отсутствия отказа зуба. Предположим далее, что вы знаете из своего опыта работы с системой, что значения усиления при отказе зуба менее 0,1 в величину достаточно малы, чтобы считаться здоровыми операциями. Преобразуйте значение усиления для этого ансамбля в индикатор 0 (без отказа) для -0,1 < коэффициент усиления < 0,1 и 1 (отказ) в противном случае.
sT = abs(Inputvars.Value) < 0.1;
Чтобы добавить новый индикатор отказа зуба к соответствующим данным ансамбля, сначала разверните список переменных данных в ансамбле, чтобы включить переменную для индикатора.
ensemble.DataVariables = [ensemble.DataVariables; "ToothFault"];
ensemble.DataVariables
ans = 6x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
"ToothFault"
Эта операция концептуально эквивалентна добавлению столбца в таблицу данных ансамбля. Теперь это DataVariables
содержит новое имя переменной, присвойте производное значение этому столбцу представителя с помощью writeToLastMemberRead
.
writeToLastMemberRead(ensemble,'ToothFault',sT);
На практике вы хотите добавить индикатор зубного разлома каждому представителю ансамбля. Для этого сбросьте ансамбль datastore в непрочитанное состояние, чтобы следующая операция чтения началась у первого представителя ансамбля. Затем прокрутите все представители ансамбля, вычисляя ToothFault
для каждого представителя и добавления его. The reset
операция не меняется ensemble.DataVariables
, так "ToothFault"
все еще присутствует в этом списке.
reset(ensemble); sT = false; while hasdata(ensemble) data = read(ensemble); InputVars = data.SimulationInput{1}.Variables; TFGain = InputVars.Value; sT = abs(TFGain) < 0.1; writeToLastMemberRead(ensemble,'ToothFault',sT); end
Наконец, определите новый индикатор отказа зуба как переменную условия в ансамбле datastore. Вы можете использовать это обозначение для отслеживания и обращения к переменным в данных ансамбля, которые представляют условия, при которых были сгенерированы данные представителя.
ensemble.ConditionVariables = {"ToothFault"};
ensemble.ConditionVariables
ans = "ToothFault"
Можно добавить новую переменную в ensemble.SelectedVariables
когда вы хотите прочитать его для последующего анализа. Для примера, который показывает больше способов манипулировать и анализировать данные, хранящиеся в simulationEnsembleDatastore
объект, см. Использование Simulink для генерации данных о отказе.
Создайте file ensemble datastore для данных, хранящихся в файлах MATLAB, и сконфигурируйте его с функциями, которые говорят программному обеспечению, как читать и записывать в datastore. (Для получения дополнительной информации о настройке файловых ансамблевых хранилищ данных смотрите File Ensemble Datastore With Measured Data.)
% Create ensemble datastore that points to datafiles in current folder unzip fileEnsData.zip % extract compressed files location = pwd; extension = '.mat'; fensemble = fileEnsembleDatastore(location,extension); % Specify data and condition variables fensemble.DataVariables = ["gs";"sr";"load";"rate"]; fensemble.ConditionVariables = "label"; % Configure with functions for reading and writing variable data addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path fensemble.ReadFcn = @readBearingData; fensemble.WriteToMemberFcn = @writeBearingData;
Функции подсказывают read
и writeToLastMemberRead
команды для взаимодействия с файлами данных, составляющими ансамбль. Таким образом, когда вы вызываете read
команда, она использует readBearingData
чтобы считать все переменные в fensemble.SelectedVariables
. В данном примере readBearingData
извлекает запрашиваемые переменные из структуры, bearing
и другие переменные, сохраненные в файле. Он также анализирует имя файла для состояния отказа данных.
Укажите переменные для чтения и прочтите их от первого представителя ансамбля.
fensemble.SelectedVariables = ["gs";"load";"label"]; data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000x1 double} 0
Теперь можно обработать данные от представителя по мере необходимости. В данном примере вычислите среднее значение сигнала, сохраненного в переменной gs
. Извлеките данные из таблицы, возвращенной read
.
gsdata = data.gs{1}; gsmean = mean(gsdata);
Можно записать среднее значение gsmean
назад в файл данных как новая переменная. Для этого сначала разверните список переменных данных в ансамбле, чтобы включить переменную для нового значения. Вызовите новую переменную gsMean
.
fensemble.DataVariables = [fensemble.DataVariables;"gsMean"]
fensemble = fileEnsembleDatastore with properties: ReadFcn: @readBearingData WriteToMemberFcn: @writeBearingData DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: "label" SelectedVariables: [3x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: "/tmp/BR2021ad_1657350_6935/mlx_to_docbook3/tpb00852e4/predmaint-ex34165887/FaultData_01.mat" Files: [5x1 string]
Затем запишите производное среднее значение в файл, соответствующий представителю ансамбля с последним чтением. (См. «Ансамбли данных» для мониторинга условия и прогнозирующего обслуживания.) Когда вы звоните writeToLastMemberRead
, он преобразует данные в структуру и вызывает fensemble.WriteToMemberFcn
чтобы записать данные в файл.
writeToLastMemberRead(fensemble,'gsMean',gsmean);
Вызывающие read
снова переводит индикатор последнего представителя чтения в следующий файл ансамбля и считывает данные из этого файла .
data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000x1 double} 50
Можно подтвердить, что эти данные получены от другого представителя, рассмотрев load
переменная в таблице. Здесь его значение составляет 50, в то время как в ранее прочитанном представителе оно составляло 0.
Можно повторить шаги обработки, чтобы вычислить и добавить среднее значение для этого представителя ансамбля. На практике более полезно автоматизировать процесс чтения, обработки и записи данных. Для этого сбросьте ансамбль в состояние, в котором данные не были считаны. Затем выполните цикл через ансамбль и выполните чтение, обработку и запись шагов для каждого представителя.
reset(fensemble) while hasdata(fensemble) data = read(fensemble); gsdata = data.gs{1}; gsmean = mean(gsdata); writeToLastMemberRead(fensemble,'gsMean',gsmean); end
The hasdata
команда возвращает false
когда каждый представитель ансамбля был прочитан. Теперь каждый файл данных в ансамбле включает gsMean
переменная, выведенная из gs
данных в этом файле. Можно использовать методы, подобные этому циклу, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирования-обслуживания. Для примера, более подробно иллюстрирующего использование file ensemble datastore в процессе разработки алгоритмов, см. Раздел «Диагностика отказа подшипника качения». В примере также показано, как использовать Parallel Computing Toolbox™ для ускорения обработки больших ансамблей данных.
Чтобы подтвердить, что производная переменная присутствует в файле datastore ансамбля, прочитайте ее с первых и вторых представителей ансамбля. Для этого снова сбросьте ансамбль и добавьте новую переменную к выбранным переменным. На практике, после того, как вы вычислили производные значения, может быть полезно считать только эти значения, не перечитывая необработанные данные, которые могут занимать значительное пространство в памяти. В данном примере считайте выбранные переменные, которые включают новую переменную, gsMean
, но не включать необработанные данные, gs
.
reset(fensemble) fensemble.SelectedVariables = ["label";"load";"gsMean"]; data1 = read(fensemble)
data1=1×3 table
label load gsMean
________ ____ ________
"Faulty" 0 -0.22648
data2 = read(fensemble)
data2=1×3 table
label load gsMean
________ ____ ________
"Faulty" 50 -0.22937
rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path
ensemble
- Ensemble datastoresimulationEnsembleDatastore
| объекта fileEnsembleDatastore
объектEnsemble datastore, к которому добавляются переменные данных, заданные как:
simulationEnsembleDatastore
объект
fileEnsembleDatastore
объект
writeToLastMemberRead
записывает данные в последний считанный представитель указанного ансамбля, идентифицированный LastMemberRead
свойство ансамбля. Последний читаемый представитель ансамбля является участником, к которому последний раз обращался с помощью read
команда. (См. «Ансамбли данных» для мониторинга условия и прогнозирующего обслуживания.)
data
- Новые данныеtable
Новые данные для записи в текущий представитель ансамбля, заданные как table
. Например, предположим, что вы вычислили два значения, которые вы хотите добавить к текущему представителю: вектор, сохраненный в качестве MATLAB® переменная рабочей области Afilt
, и скаляр, сохраненный как Amean
. Используйте следующую команду для создания data
.
data = table(Afilt,Amean,'VariableNames',{'Afilt','Amean'});
Количество строк в таблице должно совпадать с ReadSize
свойство ensemble
. По умолчанию ReadSize
= 1, и вы записываете одну строку таблицы в один представитель ансамбля. Когда вы конфигурируете ensemble
чтобы считать несколько представителей одновременно, необходимо записать на одно и то же число представителей. Для образца, если ReadSize
= 3, затем data
представляет собой трехрядную таблицу.
Когда вы используете simulationEnsembleDatastore
управлять данными в удаленном местоположении, например облачным хранилищем с помощью Amazon S3™ (Simple Storage Service), Windows Azure® Хранилище больших двоичных объектов и Hadoop® Распределенная файловая система (HDFS™), вы не можете использовать writeToLastMemberRead
для добавления данных в ансамбль datastore.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.