Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

hasdata

クラス: matlab.io.datastore.SimulationDatastore
名前空間: matlab.io.datastore

データが読み取り可能かどうかを判別

構文

tf = hasdata(dst)

説明

tf = hasdata(dst) は、dst で指定されたデータストア (matlab.io.datastore.SimulationDatastore オブジェクト) に読み取り可能なデータがある場合に logical 1 (true) を返します。そうでない場合は論理値 0 (false) を返します。

入力引数

すべて展開する

入力データ ストア。matlab.io.datastore.SimulationDatastore オブジェクトとして指定します。SimulationDatastore オブジェクトを作成する場合は、matlab.io.datastore.SimulationDatastore を参照してください。

すべて展開する

この例では、シミュレーションからのビッグ データをログに記録し、matlab.io.datastore.SimulationDatastore オブジェクトを操作してそのデータの一部を検査および解析する方法を示します。

モデルからのビッグ データのログ記録

モデル例 sldemo_fuelsys を開きます。

open_system('sldemo_fuelsys')

[コンフィギュレーション パラメーター]、[データのインポート/エクスポート]、[データセットのデータをファイルにログ] を選択します。

set_param('sldemo_fuelsys','LoggingToFile','on')

モデルのシミュレーションを実行します。

sim('sldemo_fuelsys')

現在のフォルダーに MAT ファイル out.mat が表示されます。ファイルには、fuel (モデルのルート レベルにある) などのログに記録された信号のデータが含まれます。

コマンド プロンプトで、名前 sldemo_fuelsys_output でログ変数を参照する DatasetRef オブジェクトを作成します。

DSRef = Simulink.SimulationData.DatasetRef('out.mat','sldemo_fuelsys_output');

ビッグ データのプレビュー

中かっこ ({}) を使用して信号要素 fuel を抽出します。この信号要素は、SimulationDatastore オブジェクトを含む・Simulink.SimulationData.Signal オブジェクトとして、DSRef の 10 番目の要素になります。

SimDataSig = DSRef{10};

Signal オブジェクトの Values プロパティに存在する SimulationDatastore オブジェクトの操作を簡単にするためには、DStore という名前の変数にハンドルを格納します。

DStore = SimDataSig.Values;

preview メソッドを使用して、fuel 信号のログに記録されたデータの最初の 5 つのサンプルを検査します。

preview(DStore)
ans =

  10x1 timetable

         Time          Data 
    ______________    ______

    0 sec              1.209
    0.00056199 sec     1.209
    0.0033719 sec      1.209
    0.01 sec          1.1729
    0.02 sec          1.1409
    0.03 sec          1.1124
    0.04 sec          1.0873
    0.05 sec          1.0652
    0.055328 sec      1.0652
    0.055328 sec      1.0652

特定のサンプルの検査

ログに記録された fuel データの 603 番目のサンプルを検査します。

DStoreReadSize プロパティを、メモリ リソースを考慮して、コンピューターで許容できる数値に設定します。たとえば、ReadSize200 に設定します。

DStore.ReadSize = 200;

データ ストアから 3 回読み取りを実行します。各読み取り操作で、読み取り位置は 200 サンプル進みます。

read(DStore);
read(DStore);
read(DStore);

603 番目のサンプルに非常に近くなったため、ReadSize を小さい数値に設定します。たとえば、ReadSize5 に設定します。

DStore.ReadSize = 5;

データ ストアからの読み込みを再度実行します。

read(DStore)
ans =

  5x1 timetable

      Time       Data 
    ________    ______

    5.79 sec    1.6097
    5.8 sec     1.6136
    5.81 sec    1.6003
    5.82 sec    1.5904
    5.83 sec    1.5832

読み取られたデータの 3 番目のサンプルは、データ ストアの 603 番目のサンプルになります。

以前のサンプルの検査

ログに記録された fuel データの 403 番目のサンプルを検査します。前の読み取り操作により、データ ストアは 606 番目のサンプルから読み取りを開始するため、データ ストアをリセットしなければなりません。その後、最初のサンプルから 403 番目のサンプルまでを読み取ることができます。

reset メソッドを使用して、DStore をリセットします。

reset(DStore);

ReadSize200 に再度設定します。

DStore.ReadSize = 200;

データ ストアから 2 回読み取り、読み取り位置を 401 番目のサンプルに進めます。

read(DStore);
read(DStore);

ReadSize5 に再度設定します。

DStore.ReadSize = 5;

データ ストアから読み取ります。

read(DStore)
ans =

  5x1 timetable

      Time       Data  
    ________    _______

    3.85 sec      0.999
    3.86 sec    0.99219
    3.87 sec    0.98538
    3.88 sec    0.97858
    3.89 sec    0.97179

複数のサンプルの抽出

サンプル 1001 ~ 1020 (合計 20 サンプル) を抽出します。

データ ストアをリセットします。

reset(DStore)

サンプル 1001 に進みます。

DStore.ReadSize = 200;

for i = 1:5
    read(DStore);
end

データベースから 20 サンプル抽出する準備を行います。

DStore.ReadSize = 20;

サンプル 1001 ~ 1020 を抽出します。抽出したデータを targetSamples という名前の変数に格納します。

targetSamples = read(DStore)
targetSamples =

  20x1 timetable

      Time       Data 
    ________    ______

    9.7 sec     1.5828
    9.71 sec    1.5733
    9.72 sec    1.5664
    9.73 sec    1.5614
    9.74 sec    1.5579
    9.75 sec    1.5553
    9.76 sec    1.5703
    9.77 sec     1.582
    9.78 sec    1.5913
    9.79 sec    1.5988
    9.8 sec      1.605
    9.81 sec    1.6101
    9.82 sec    1.6145
    9.83 sec    1.6184
    9.84 sec    1.6049
    9.85 sec     1.595
    9.86 sec    1.5877
    9.87 sec    1.5824
    9.88 sec    1.5785
    9.89 sec    1.5757

データ ストア内のデータの最大値の検出

データ ストアをリセットします。

reset(DStore)

while ループを hasdata メソッドを使用して記述し、200 サンプルのチャンク単位でデータを段階的に解析します。

DStore.ReadSize = 200;
runningMax = [];
while hasdata(DStore)
    tt = read(DStore);
    rawChunk = tt.Data;
    runningMax = max([rawChunk; runningMax]);
end

これで、変数 runningMax にはデータ ストア全体における最大値が格納されます。

runningMax
runningMax =

    1.6423

バージョン履歴

R2017a で導入