read
アンサンブル データストアからメンバー データを読み取り
説明
この関数は、状態監視と予知保全のためのデータをアンサンブル データストアから読み取るために使用します。
は、アンサンブル データストア data
= read(ensemble
)ensemble
のメンバーからデータを読み取ります。関数はアンサンブル データストアの SelectedVariables
プロパティで指定された変数を読み取り、それらを table で返します。
アンサンブルが作成後 (または reset
を使用して最後にリセットされた後) に読み取られていない場合、read
はアンサンブルの最初のメンバーからデータを読み取ります。最初のメンバーはソフトウェアで判別されます。それ以外の場合、read
は次のアンサンブル メンバーからデータを読み取ります。最後に読み取られたメンバーを識別するために、read
はアンサンブルの LastMemberRead
プロパティを更新します。アンサンブル データストアの動作の詳細については、状態監視と予知保全のためのデータ アンサンブルを参照してください。
例
一般に、read
コマンドは、simulationEnsembleDatastore
オブジェクトから MATLAB® ワークスペースにデータを抽出するために使用します。多くの場合、アンサンブルには特定の解析に使用する必要がある変数よりも多くの変数が格納されています。読み取る変数のサブセットを選択するには、 simulationEnsembleDatastore
オブジェクトの SelectedVariables
プロパティを使用します。
この例では、次のコードを使用して、前に Simulink® モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore
オブジェクトを作成します (generateSimulationEnsemble
を参照)。アンサンブルには、モデル パラメーター ToothFaultGain
の 5 つの異なる値についてのシミュレーション データが含まれます。データのボリュームにより、unzip
操作には数分かかります。
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]
データの生成元のモデル TransmissionCasingSimplified
では、結果のアンサンブルに加速度計データ Vibration
やタコメーター データ Tacho
などの変数を格納するように構成していました。既定では、それらのすべての変数が simulationEnsembleDatastore
オブジェクトでデータ変数および選択された変数の両方として指定され、DataVariables
プロパティと SelectedVariables
プロパティに表示されます。
ensemble.DataVariables
ans = 5×1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
ensemble.SelectedVariables
ans = 5×1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
目的の解析を行うには、Vibration
データと、このメンバー データがシミュレートされた状態を記述する Simulink.SimulationInput
オブジェクトのみが必要であると仮定します。ensemble.SelectedVariables
を設定して読み取る変数を指定します。これにより、read
コマンドで現在のアンサンブル メンバーからそれらの変数が抽出されます。
ensemble.SelectedVariables = ["Vibration";"SimulationInput"]; data1 = read(ensemble)
data1=1×2 table
Vibration SimulationInput
___________________ ______________________________
{20202×1 timetable} {1×1 Simulink.SimulationInput}
data.Vibration
は、シミュレーション時間を格納する 1 つの timetable
とそれに対応する振動信号を含む cell 配列です。これで、このデータを必要に応じて処理することができます。たとえば、table から振動データを抽出してプロットします。
vibdata1 = data1.Vibration{1};
plot(vibdata1.Time,vibdata1.Data)
title('Vibration - First Ensemble Member')
このアンサンブルに対して read
を次に呼び出すと、最後に読み取られたメンバーの指定がアンサンブルの次のメンバーに進みます (状態監視と予知保全のためのデータ アンサンブルを参照)。選択した変数をアンサンブルの次のメンバーから読み取ります。
data2 = read(ensemble)
data2=1×2 table
Vibration SimulationInput
___________________ ______________________________
{20215×1 timetable} {1×1 Simulink.SimulationInput}
data1
と data2
に異なるアンサンブル メンバーからのデータが含まれることを確認するため、変化するモデル パラメーター ToothFaultGain
の値を調べます。各アンサンブルで、この値は SimulationInput
変数の Variables
フィールドに格納されています。
data1.SimulationInput{1}.Variables
ans = Variable with properties: Name: 'ToothFaultGain' Value: -2 Workspace: 'global-workspace' Context: '' Description: ""
data2.SimulationInput{1}.Variables
ans = Variable with properties: Name: 'ToothFaultGain' Value: -1.5000 Workspace: 'global-workspace' Context: '' Description: ""
この結果から、data1
は ToothFaultGain
= –2 のアンサンブル メンバーから、data2
は ToothFaultGain
= –1.5 のメンバーからのものであることが確認されます。
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
read
コマンドの 1 回の呼び出しで複数のアンサンブル メンバーからデータを読み取るには、アンサンブル データストアの ReadSize
プロパティを使用します。この例では simulationEnsembleDatastore
を使用しますが、fileEnsembleDatastore
にも同じ手法を使用できます。
次のコードを使用して、前に Simulink モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore
オブジェクトを作成します (generateSimulationEnsemble
を参照)。アンサンブルには、モデル パラメーター ToothFaultGain
の 5 つの異なる値についてのシミュレーション データが含まれます。(データのボリュームにより、unzip
操作に 1 ~ 2 分かかることがあります。)一部のデータ変数を読み取るように指定します。
unzip simEnsData.zip % extract compressed files ensemble = simulationEnsembleDatastore(pwd,'logsout'); ensemble.SelectedVariables = ["Vibration";"SimulationInput"];
既定では、このアンサンブル データストアに対して read
を呼び出すと、最初のアンサンブル メンバーの Vibration
変数と SimulationInput
変数の値を含む単一行の table が返されます。3 つのメンバーを一度に読み取るように ReadSize
プロパティを変更します。
ensemble.ReadSize = 3; data1 = read(ensemble)
data1=3×2 table
Vibration SimulationInput
___________________ ______________________________
{20202×1 timetable} {1×1 Simulink.SimulationInput}
{20215×1 timetable} {1×1 Simulink.SimulationInput}
{20204×1 timetable} {1×1 Simulink.SimulationInput}
read
は、1 番目、2 番目、および 3 番目の各アンサンブル メンバーからのデータを各行に含む 3 行の table を返します。さらに、read
は、アンサンブル データストアの LastReadMember
プロパティを 3 つの対応するファイルのパスを含む string 配列に更新します。データの読み込み中にメモリ不足になるリスクがあるため、ReadSize
をあまり大きい値に設定することは避けてください。
アンサンブルに追加のメンバーが 3 つ以上含まれている場合は、次の read
操作で 4 番目、5 番目、および 6 番目のメンバーからのデータが返されます。この例のアンサンブルに含まれるメンバーは全部で 5 つだけであるため、次の read
操作では 2 行のみが返されます。
data2 = read(ensemble)
data2=2×2 table
Vibration SimulationInput
___________________ ______________________________
{20213×1 timetable} {1×1 Simulink.SimulationInput}
{20224×1 timetable} {1×1 Simulink.SimulationInput}
入力引数
読み取るアンサンブル データストア。以下として指定します。
simulationEnsembleDatastore
オブジェクト —read
は次のアンサンブル メンバーを読み取ります。fileEnsembleDatastore
オブジェクト —read
はensemble.ReadFcn
プロパティで指定された関数を使用して次のアンサンブル メンバーを読み取ります。(ファイル アンサンブル データストアの操作の詳細については、fileEnsembleDatastore
を参照してください。)
いずれの場合も、read
は ensemble.SelectedVariables
で指定されたすべての変数を含む table を返します。
出力引数
アンサンブル メンバーからの選択された変数。table
として返されます。table の変数は選択された変数で、table のデータはアンサンブル データから読み取られた値です。既定では、read
は一度に 1 つのアンサンブル メンバーを読み取り、単一の table の行を返します。
複数のアンサンブル メンバーを一度に読み取るには、ensemble
の ReadSize
プロパティを 1 より大きい値に設定します。たとえば、ReadSize
を 3 に設定すると、read
は次の 3 つのアンサンブル メンバーを読み取り、3 行の table を返します。未読のメンバーが ReadSize
より少ない場合は、read
は残りのメンバーの数だけ行を持つ table を返します。例については、1 回の操作での複数のアンサンブル メンバーの読み取りを参照してください。データの読み込み中にメモリ不足になるリスクがあるため、ReadSize
をあまり大きい値に設定することは避けてください。
データとアンサンブル メンバーの情報。次のフィールドをもつ構造体として返されます。
Size
— tabledata
の次元。ベクトルとして返されます。たとえば、アンサンブルにensemble.SelectedVariables
で指定された 4 つの変数がある場合、Info.Size = [1 4]
になります。FileName
— アクセスしたアンサンブル メンバーに対応するデータ ファイルのパス。string として返されます。たとえば、"C:\Data\Experiment1\fault1.mat"
のようになります。read
を呼び出すと、アンサンブルのLastMemberRead
プロパティもこの値に設定されます。ensemble
のReadSize
プロパティが 1 より大きい場合、この値はアクセスしたすべてのファイルのパスを含む string ベクトルになります。
バージョン履歴
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)