このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
read
データストア内のデータのチャンクを読み取る
説明
は、データストア data
= read(dst
)dst
からサンプルのチャンクを読み取り、読み取り位置を更新します。関数 read
を続けて呼び出すと、前回の呼び出しの終点から読み取りが続行されます。関数 read
を使用して、大きすぎてメモリに入りきらない信号をインクリメンタルに処理します。
データストアが
matlab.io.datastore.sdidatastore
オブジェクトの場合、関数read
が読み取るサンプルの数は変化します。返されるtimetable
オブジェクトdata
は常にメモリに収まります。データストアが
matlab.io.datastore.SimulationDatastore
オブジェクトの場合、SimulationDatastore
オブジェクトのReadSize
プロパティを使用して、一度に読み取るデータの量をサンプル (タイム ステップ) 単位で指定します。関数progress
とNumSamples
プロパティを使用して、現在の読み取り位置を確認します。
例
matlab.io.datastore.sdidatastore
オブジェクトを使用した信号データの処理
matlab.io.datastore.sdidatastore
オブジェクトは、シミュレーション データ インスペクター リポジトリ内の信号データを参照します。信号が大きすぎてメモリに入りきらない場合、sdidatastore
オブジェクトを使用して手動でデータをインクリメンタルに処理するか、インクリメンタル処理をユーザーに代わって実行する、信号の tall timetable を作成します。
信号の sdidatastore
の作成
sldemo_fuelsys
モデルのシミュレーションを実行します。このモデルは、複数の信号をログに記録して、シミュレーション データ インスペクター リポジトリ内にデータを作成するよう構成されています。
mdl = "sldemo_fuelsys";
sim(mdl);
ログに記録された信号データは、sldemo_fuelsys_output
という名前の Simulink.SimulationData.Dataset
オブジェクトに返されます。
sldemo_fuelsys_output
sldemo_fuelsys_output = Simulink.SimulationData.Dataset 'sldemo_fuelsys_output' with 10 elements Name BlockPath ______________ ________________________________________ 1 [1x1 Signal] '' sldemo_fuelsys/EGO Fault Switch 2 [1x1 Signal] air_fuel_ratio sldemo_fuelsys/Engine Gas Dynamics 3 [1x1 Signal] '' sldemo_fuelsys/Engine Speed Fault Switch 4 [1x1 Signal] speed sldemo_fuelsys/Engine_Speed_Selector 5 [1x1 Signal] '' sldemo_fuelsys/MAP Fault Switch 6 [1x1 Signal] map sldemo_fuelsys/MAP_Selector 7 [1x1 Signal] ego sldemo_fuelsys/O2_Voltage_Selector 8 [1x1 Signal] '' ...o_fuelsys/Throttle Angle Fault Switch 9 [1x1 Signal] throttle sldemo_fuelsys/Throttle_Angle_Selector 10 [1x1 Signal] fuel sldemo_fuelsys/To Plant - Use braces { } to access, modify, or add elements using index.
シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、speed
という名前の信号の信号 ID を取得します。
runCount = Simulink.sdi.getRunCount;
latestRunID = Simulink.sdi.getRunIDByIndex(runCount);
latestRun = Simulink.sdi.getRun(latestRunID);
speedSigID = getSignalIDsByName(latestRun,"speed");
信号 ID を使用して、speed
信号の sdidatastore
オブジェクトを作成します。
speedSDIds = matlab.io.datastore.sdidatastore(speedSigID);
データストアの内容の確認
sdidatastore
オブジェクトの Name
プロパティをチェックして、想定のとおりの内容であることを確認します。
speedSDIds.Name
ans = 'speed'
また、関数 preview
を使用して、信号内の最初の 10 個のサンプルを確認することもできます。
preview(speedSDIds)
ans=10×1 timetable
Time Data
______________ ____
0 sec 300
0.00056199 sec 300
0.0033719 sec 300
0.01 sec 300
0.02 sec 300
0.03 sec 300
0.04 sec 300
0.05 sec 300
0.055328 sec 300
0.055328 sec 300
sdidatastore
オブジェクトによる信号データの処理
信号が大きすぎてメモリに入りきらない場合、関数 read
を使用して、シミュレーション データ インスペクター リポジトリからデータのチャンクを読み取り、データをインクリメンタルに処理することができます。関数 hasdata
を、信号全体をインクリメンタルに処理する際の while ループの条件として使用します。たとえば、信号の最大値を見つけます。
latestMax = []; while hasdata(speedSDIds) speedChunk = read(speedSDIds); speedChunkData = speedChunk.Data; latestMax = max([speedChunkData; latestMax]); end latestMax
latestMax = 300
各読み取り操作で、関数 read
は、読み取り位置を次の読み取り操作の開始位置に更新します。sdidatastore
オブジェクトの一部またはすべてを読み取った後、読み取り位置をリセットして、信号の先頭から再度開始できます。
reset(speedSDIds)
メモリ内の信号データの処理
sdidatastore
オブジェクトで参照された信号がメモリに収まる場合、関数 read
でデータをインクリメンタルに読み取って処理する代わりに、関数 readall
を使用してすべての信号データをメモリに読み取って処理することができます。関数 readall
は、すべての信号データを含む timetable
を返します。
speedTimetable = readall(speedSDIds); speedMax = max(speedTimetable.Data)
speedMax = 300
SimulationDatastore
オブジェクトのデータの検査と解析
シミュレーションからのビッグ データをログに記録し、matlab.io.datastore.SimulationDatastore
オブジェクトを操作してそのデータの一部を検査および解析できます。
モデルからのビッグ データのログ記録
モデル sldemo_fuelsys
を開きます。
mdl = "sldemo_fuelsys";
open_system(mdl)
[コンフィギュレーション パラメーター]、[データのインポート/エクスポート]、[データセットのデータをファイルにログ] を選択して、データを永続ストレージに記録します。あるいは、Dataset
形式を使用して、ワークスペースの代わりに MAT ファイルにプログラムによってデータを記録することができます。
set_param(mdl,"LoggingToFile","on")
モデルのシミュレーションを実行します。
sim(mdl);
現在のフォルダーに MAT ファイル out.mat
が表示されます。ログに記録された信号データは、変数名 sldemo_fuelsys_out
を使用して MAT ファイルに格納されます。
ログに記録された信号データを参照する DatasetRef
オブジェクトを作成します。
DSRef = Simulink.SimulationData.DatasetRef("out.mat","sldemo_fuelsys_output");
ビッグ データのプレビュー
中かっこを使用して、fuel
信号の SimulationDatastore
表現を返します。これは、DatasetRef
オブジェクト DSRef
の 10 番目の要素になります。SimulationDatastore
オブジェクトは、返される Signal
オブジェクトの Values
プロパティに存在します。
SimDataSig = DSRef{10}; DStore = SimDataSig.Values;
関数 preview
を使用して、fuel
信号のログに記録されたデータの最初の 10 個のサンプルを検査します。
preview(DStore)
ans=10×1 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 番目のサンプルを検査するとします。DStore
の ReadSize
プロパティを、メモリ リソースを考慮して、コンピューターで許容できる数値に設定します。たとえば、ReadSize
を 200
に設定します。
DStore.ReadSize = 200;
データ ストアから 3 回読み取りを実行します。各読み取り操作で、読み取り位置は 200 サンプル進みます。
read(DStore); read(DStore); read(DStore);
603 番目のサンプルに近くなったため、ReadSize
を小さい数値に設定して、ターゲット サンプルを見つけやすくします。たとえば、ReadSize
を 5
に設定します。
DStore.ReadSize = 5;
データ ストアからの読み込みを再度実行します。読み取られたデータの 3 番目のサンプルは、データ ストアの 603 番目のサンプルになります。
read(DStore)
ans=5×1 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
以前のサンプルの検査
以前のサンプルを検査することもできます。たとえば、ログに記録された fuel
データの 403 番目のサンプルを検査します。前の読み取り操作により、データストアは 606 番目のサンプルから読み取りを開始します。
関数 reset
を使用して、DStore
をリセットします。その後、最初のサンプルから 403 番目のサンプルまでを読み取ります。
reset(DStore);
ReadSize
を 200
に設定します。
DStore.ReadSize = 200;
データ ストアから 2 回読み取り、読み取り位置を 401 番目のサンプルに進めます。
read(DStore); read(DStore);
ReadSize
を 5
に設定してデータストアから読み取ります。ここで、読み取られたデータの 3 番目のサンプルが、データストアの 403 番目のサンプルになります。
DStore.ReadSize = 5; read(DStore)
ans=5×1 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
複数のサンプルの抽出
関数 read
を使用して、複数のサンプルを抽出することもできます。たとえば、サンプル 1001 ~ 1020 を抽出します。
データ ストアをリセットします。次に、ReadSize
プロパティを 200
に設定してデータストアを 5 回読み取り、サンプル 1001 に進みます。
reset(DStore) DStore.ReadSize = 200; for i = 1:5 read(DStore); end
ReadSize
を 20
に設定して、データストアから 20 サンプルを抽出します。
DStore.ReadSize = 20;
サンプル 1001 ~ 1020 を抽出します。抽出したデータを targetSamples
という名前の変数に格納します。
targetSamples = read(DStore)
targetSamples=20×1 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
⋮
データ ストア内のデータの最大値の検出
関数 hasdata
を while
ループの条件として使用し、200 サンプルのチャンク単位でデータをインクリメンタルに解析します。
reset(DStore); DStore.ReadSize = 200; runningMax = []; while hasdata(DStore) tt = read(DStore); rawChunk = tt.Data; runningMax = max([rawChunk; runningMax]); end
変数 runningMax
にはデータストア全体における最大値が格納されます。
runningMax
runningMax = 1.6423
入力引数
dst
— データストア
matlab.io.datastore.sdidatastore
オブジェクト | matlab.io.datastore.simulationdatastore
オブジェクト
読み取るデータストア。matlab.io.datastore.sdidatastore
オブジェクトまたは matlab.io.datastore.SimulationDatastore
オブジェクトとして指定します。
simdst
— データストア
matlab.io.datastore.simulationdatastore
オブジェクト
読み取るデータストア。matlab.io.datastore.SimulationDatastore
オブジェクトとして指定します。
出力引数
代替方法
matlab.io.datastore.sdidatastore
データストアを扱う場合、sdidatastore
オブジェクトを使用して、大きすぎてメモリに入りきらない信号を処理する tall timetable を作成することができます。tall timetable は、ユーザーに代わって、信号データのチャンクの読み取りと処理を行います。tall timetable の使い方の詳細については、tall 配列を参照してください。
バージョン履歴
R2017b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)