Main Content

read

アンサンブル データストアからメンバー データを読み取り

説明

この関数は、状態監視と予知保全のためのデータをアンサンブル データストアから読み取るために使用します。

data = read(ensemble) は、アンサンブル データストア ensemble のメンバーからデータを読み取ります。関数はアンサンブル データストアの SelectedVariables プロパティで指定された変数を読み取り、それらを table で返します。

アンサンブルが作成後 (または reset を使用して最後にリセットされた後) に読み取られていない場合、read はアンサンブルの最初のメンバーからデータを読み取ります。最初のメンバーはソフトウェアで判別されます。それ以外の場合、read は次のアンサンブル メンバーからデータを読み取ります。最後に読み取られたメンバーを識別するために、read はアンサンブルの LastMemberRead プロパティを更新します。アンサンブル データストアの動作の詳細については、状態監視と予知保全のためのデータ アンサンブルを参照してください。

[data,info] = read(ensemble) は、データが読み取られた場所とデータのサイズに関する情報も返します。

すべて折りたたむ

一般に、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: [5x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: [0x0 string]
       SelectedVariables: [5x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

データの生成元のモデル TransmissionCasingSimplified では、結果のアンサンブルに加速度計データ Vibration やタコメーター データ Tacho などの変数を格納するように構成していました。既定では、それらのすべての変数が simulationEnsembleDatastore オブジェクトでデータ変数および選択された変数の両方として指定され、DataVariables プロパティと SelectedVariables プロパティに表示されます。

ensemble.DataVariables
ans = 5x1 string
    "PMSignalLogName"
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"

ensemble.SelectedVariables
ans = 5x1 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        
    ___________________    ______________________________

    {20202x1 timetable}    {1x1 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        
    ___________________    ______________________________

    {20215x1 timetable}    {1x1 Simulink.SimulationInput}

data1data2 に異なるアンサンブル メンバーからのデータが含まれることを確認するため、変化するモデル パラメーター 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: ""

この結果から、data1ToothFaultGain = –2 のアンサンブル メンバーから、data2ToothFaultGain = –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"    {5000x1 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: [5x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: "label"
       SelectedVariables: [3x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: "/tmp/Bdoc24a_2528353_1096756/tpfe6adf35/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 

これが別のメンバーからのデータであることは、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        
    ___________________    ______________________________

    {20202x1 timetable}    {1x1 Simulink.SimulationInput}
    {20215x1 timetable}    {1x1 Simulink.SimulationInput}
    {20204x1 timetable}    {1x1 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        
    ___________________    ______________________________

    {20213x1 timetable}    {1x1 Simulink.SimulationInput}
    {20224x1 timetable}    {1x1 Simulink.SimulationInput}

入力引数

すべて折りたたむ

読み取るアンサンブル データストア。以下として指定します。

  • simulationEnsembleDatastore オブジェクト — read は次のアンサンブル メンバーを読み取ります。

  • fileEnsembleDatastore オブジェクト — readensemble.ReadFcn プロパティで指定された関数を使用して次のアンサンブル メンバーを読み取ります。(ファイル アンサンブル データストアの操作の詳細については、fileEnsembleDatastore を参照してください。)

いずれの場合も、readensemble.SelectedVariables で指定されたすべての変数を含む table を返します。

出力引数

すべて折りたたむ

アンサンブル メンバーからの選択された変数。table として返されます。table の変数は選択された変数で、table のデータはアンサンブル データから読み取られた値です。既定では、read は一度に 1 つのアンサンブル メンバーを読み取り、単一の table の行を返します。

複数のアンサンブル メンバーを一度に読み取るには、ensembleReadSize プロパティを 1 より大きい値に設定します。たとえば、ReadSize を 3 に設定すると、read は次の 3 つのアンサンブル メンバーを読み取り、3 行の table を返します。未読のメンバーが ReadSize より少ない場合は、read は残りのメンバーの数だけ行を持つ table を返します。例については、1 回の操作での複数のアンサンブル メンバーの読み取りを参照してください。データの読み込み中にメモリ不足になるリスクがあるため、ReadSize をあまり大きい値に設定することは避けてください。

データとアンサンブル メンバーの情報。次のフィールドをもつ構造体として返されます。

  • Size — table data の次元。ベクトルとして返されます。たとえば、アンサンブルに ensemble.SelectedVariables で指定された 4 つの変数がある場合、Info.Size = [1 4] になります。

  • FileName — アクセスしたアンサンブル メンバーに対応するデータ ファイルのパス。string として返されます。たとえば、"C:\Data\Experiment1\fault1.mat" のようになります。read を呼び出すと、アンサンブルの LastMemberRead プロパティもこの値に設定されます。ensembleReadSize プロパティが 1 より大きい場合、この値はアクセスしたすべてのファイルのパスを含む string ベクトルになります。

バージョン履歴

R2018a で導入