writeToLastMemberRead
アンサンブル データストアのメンバーにデータを書き込み
説明
writeToLastMemberRead( は、1 つ以上の ensemble,Name,Value)Name,Value のペアの引数で指定されたデータをアンサンブル データストアの最後に読み取られたメンバーに書き込みます。最後に読み取られたメンバーは、read コマンドを使用して最後にアクセスしたメンバーです。(状態監視と予知保全のためのデータ アンサンブルを参照してください。)Name はそれぞれ ensemble.DataVariables プロパティのエントリと一致していなければなりません。関数は対応する Value をアンサンブル データストアに書き込みます。
ensembleがsimulationEnsembleDatastoreオブジェクトの場合、writeToLastMemberReadは、最後に読み取られたアンサンブル メンバー (ensemble.LastMemberRead) に対応する MAT ファイルにデータを書き込みます。ensembleがfileEnsembleDatastoreオブジェクトの場合、writeToLastMemberReadは、ensemble.WriteToMemberFcnプロパティで識別される関数を使用してデータを書き込みます。そのプロパティが定義されていない場合、writeToLastMemberReadはエラーを生成します。
この構文は、ensemble の ReadSize プロパティが 1 より大きい場合は使用できません。代わりに writeToLastMemberRead(ensemble,data) を使用してください。
例
アンサンブル データストアのデータを処理し、派生した変数をアンサンブル メンバーに追加できます。この例では、変数の値を処理して、アンサンブル メンバーに故障ありで取得されたデータが含まれているかどうかを示すラベルを計算します。その後、そのラベルをアンサンブルに追加します。
この例では、次のコードを使用して、前に Simulink® モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore オブジェクトを作成します。(generateSimulationEnsembleを参照してください。)アンサンブルには、モデル パラメーター ToothFaultGain の 5 つの異なる値についてのシミュレーション データが含まれます。モデルは、この例のために simEnsData.zip に格納されている MAT ファイルの logsout という名前の変数にシミュレーション データを記録するように構成されています。データのボリュームにより、unzip 操作に 1 ~ 2 分かかることがあります。
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble =
simulationEnsembleDatastore with properties:
DataVariables: [5×1 string]
IndependentVariables: [0×0 string]
ConditionVariables: [0×0 string]
SelectedVariables: [5×1 string]
ReadSize: 1
NumMembers: 5
LastMemberRead: [0×0 string]
Files: [5×1 string]
アンサンブルの最初のメンバーからデータを読み取ります。最初のメンバーであるアンサンブルがソフトウェアで判定され、対応するファイルの名前を反映するように ensemble.LastMemberRead プロパティが更新されます。
data = read(ensemble)
data=1×5 table
PMSignalLogName SimulationInput SimulationMetadata Tacho Vibration
_______________ ______________________________ _________________________________ ___________________ ___________________
{'logsout'} {1×1 Simulink.SimulationInput} {1×1 Simulink.SimulationMetadata} {20202×1 timetable} {20202×1 timetable}
既定では、アンサンブル データに格納されているすべての変数が SelectedVariables として指定されます。そのため、返される table の行には、すべてのアンサンブル変数が含まれます。これには、このアンサンブル メンバーのシミュレーションについて構成した Simulink.SimulationInput オブジェクトを格納する変数 SimulationInput も含まれます。そのオブジェクトの Variables プロパティに、アンサンブル メンバーに使用される ToothFaultGain の値がデータ構造体として格納されています。その値を調べます。(シミュレーションの構成の格納方法の詳細については、Simulink.SimulationInput (Simulink)を参照してください。)
data.SimulationInput{1}ans =
SimulationInput with properties:
ModelName: 'TransmissionCasingSimplified'
InitialState: [0×0 Simulink.op.ModelOperatingPoint]
ExternalInput: []
ModelParameters: [0×0 Simulink.Simulation.ModelParameter]
BlockParameters: [0×0 Simulink.Simulation.BlockParameter]
Variables: [1×1 Simulink.Simulation.Variable]
PreSimFcn: []
PostSimFcn: []
UserString: ''
VariantConfiguration: ''
Inputvars = data.SimulationInput{1}.Variables;
Inputvars.Nameans = 'ToothFaultGain'
Inputvars.Value
ans = -2
各アンサンブル メンバー内の ToothFaultGain 値を、ギア故障の有無を示すバイナリ インジケーターに変換すると仮定します。さらに、システムの使用経験から、ギア歯故障のゲイン値の大きさが 0.1 より小さい場合は健全動作と見なすのに十分であることがわかっているとします。このアンサンブルのゲイン値を、–0.1 < ゲイン < 0.1 の場合は 0 (故障なし)、そうでない場合は 1 (故障あり) のインジケーターに変換します。
sT = abs(Inputvars.Value) < 0.1;
新しい歯の故障インジケーターを対応するアンサンブル データに追加するには、まずアンサンブルのデータ変数のリストを拡張して、インジケーターの変数を含めます。
ensemble.DataVariables = [ensemble.DataVariables; "ToothFault"];
ensemble.DataVariablesans = 6×1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
"ToothFault"
この操作は、概念的にはアンサンブル データの table に列を追加することと同じです。新しい変数の名前が DataVariables に格納されたので、メンバーのその列に writeToLastMemberRead を使用して派生値を代入します。
writeToLastMemberRead(ensemble,'ToothFault',sT);実際には、歯の故障インジケーターをアンサンブルのすべてのメンバーに追加することが望まれます。そのためには、アンサンブル データストアを未読の状態にリセットして、次回の読み取り操作が最初のアンサンブル メンバーから開始されるようにします。その後、すべてのアンサンブル メンバーをループ処理して各メンバーの ToothFault を計算し、これを追加します。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
最後に、新しい歯の故障インジケーターをアンサンブル データストア内に状態変数として指定します。この指定を使用して、メンバー データが生成された状態を表す変数をアンサンブル データ内で追跡および参照することができます。
ensemble.ConditionVariables = {"ToothFault"};
ensemble.ConditionVariablesans = "ToothFault"
新しい変数をさらなる解析のために読み取る場合は ensemble.SelectedVariables に追加できます。simulationEnsembleDatastore オブジェクトに格納されているデータを操作し解析するための他の方法を示す例については、Simulink を使用した故障データの生成を参照してください。
MATLAB® ファイルに保存されたデータ用にファイル アンサンブル データストアを作成し、データストアからの読み取りとデータストアへの書き込み方法をソフトウェアに指示する関数で構成します。(ファイル アンサンブル データストアの構成の詳細については、測定データを含むファイル アンサンブル データストアを参照してください。)
% 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 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" {5000×1 double} 0
これで、メンバーからのデータを必要に応じて処理できます。この例では、変数 gs に保存されている信号の平均値を計算します。read によって返された table からデータを抽出します。
gsdata = data.gs{1};
gsmean = mean(gsdata);平均値 gsmean は、新しい変数としてデータ ファイルに書き戻すことができます。これを行うには、まずアンサンブルのデータ変数のリストを拡張して、新しい値の変数を含めます。新しい変数 gsMean を呼び出します。
fensemble.DataVariables = [fensemble.DataVariables;"gsMean"]fensemble =
fileEnsembleDatastore with properties:
ReadFcn: @readBearingData
WriteToMemberFcn: @writeBearingData
DataVariables: [5×1 string]
IndependentVariables: [0×0 string]
ConditionVariables: "label"
SelectedVariables: [3×1 string]
ReadSize: 1
NumMembers: 5
LastMemberRead: "/tmp/Bdoc25b_2988451_589082/tp914ade32/predmaint-ex34165887/FaultData_01.mat"
Files: [5×1 string]
次に、派生した平均値を、最後に読み取られたアンサンブル メンバーに対応するファイルに書き込みます。(状態監視と予知保全のためのデータ アンサンブルを参照してください。)writeToLastMemberRead を呼び出すと、これはデータを構造体に変換し、fensemble.WriteToMemberFcn を呼び出してデータをファイルに書き込みます。
writeToLastMemberRead(fensemble,'gsMean',gsmean);read を再度呼び出すと、最後に読み取られたメンバーのインジケーターがアンサンブルの次のファイルに進み、そのファイルからデータが読み取られます。
data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000×1 double} 50
これが別のメンバーからのデータであることは、table 内の load 変数を調べることによって確認できます。ここでの値は 50 ですが、前に読み取られたメンバーでは 0 でした。
処理手順を繰り返してこのアンサンブル メンバーの平均を計算し追加することは可能です。実際には、データの読み取り、処理、および書き込みのプロセスを自動化するとさらに便利です。これを行うには、アンサンブルをデータが読み取られていない状態にリセットします。その後、アンサンブルをループ処理して、各メンバーの読み取り、処理、および書き込みの手順を実行します。
reset(fensemble) while hasdata(fensemble) data = read(fensemble); gsdata = data.gs{1}; gsmean = mean(gsdata); writeToLastMemberRead(fensemble,'gsMean',gsmean); end
アンサンブルのすべてのメンバーが読み取られると、hasdata コマンドは false を返します。ここで、アンサンブル内の各データ ファイルには、そのファイルのデータ gs から求められた変数 gsMean が含まれています。予知保全アルゴリズムを開発する際、このループのような手法を使ってアンサンブル ファイルからデータを抽出し処理することができます。アルゴリズム開発のプロセスにおけるファイル アンサンブル データストアの使用をさらに詳しく説明する例は、転動体ベアリングの故障診断を参照してください。また、この例には Parallel Computing Toolbox™ を使って大規模なデータ アンサンブルの処理を高速化する方法も示されています。
派生した変数がファイル アンサンブル データストアに存在することを確認するには、最初と 2 番目のアンサンブル メンバーからこれらを読み取ります。そのためには、アンサンブルを再びリセットし、選択した変数に新しい変数を追加します。実際には、派生値を計算した後はその値のみを読み取り、かなりのメモリ空間をとる可能性のある未処理データは読み取らないようにするのが有益です。この例では、新しい変数 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
入力引数
データ変数を追加するアンサンブル データストア。以下として指定します。
simulationEnsembleDatastoreオブジェクトfileEnsembleDatastoreオブジェクト
writeToLastMemberRead は、指定されたアンサンブルの最後に読み取られたメンバーにデータを書き込みます。これは、アンサンブルの LastMemberRead プロパティで識別されます。最後に読み取られたアンサンブル メンバーは、read コマンドを使用して最後にアクセスしたメンバーです。(状態監視と予知保全のためのデータ アンサンブルを参照してください。)
現在のアンサンブル メンバーに書き込む新しいデータ。table として指定します。たとえば、計算した 2 つの値を現在のメンバーに追加するとします。MATLAB® ワークスペース変数 Afilt として格納されたベクトルと Amean として格納されたスカラーです。data を構成するには次のコマンドを使用します。
data = table(Afilt,Amean,'VariableNames',{'Afilt','Amean'});
table の行数は ensemble の ReadSize プロパティと一致していなければなりません。既定では ReadSize = 1 であり、1 行の table を 1 つのアンサンブル メンバーに書き込みます。複数のメンバーを一度に読み取るように ensemble を構成している場合は、同じ数のメンバーに書き込む必要があります。たとえば、ReadSize = 3 の場合、data は 3 行の table になります。
制限
Amazon S3™ (Simple Storage Service)、Windows Azure® Blob Storage、Hadoop® 分散ファイル システム (HDFS™) を使用するクラウド ストレージなど、リモートの場所にあるデータを
simulationEnsembleDatastoreを使用して管理している場合、アンサンブル データストアにwriteToLastMemberReadを使用してデータを追加することはできません。
バージョン履歴
R2018a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)