Класс: matlab.io.datastore.SimulationDatastore
Пакет: matlab.io.datastore
Чтение данных в datastore
data = read(dst)
[data,info]
= read(dst)
возвращает данные из datastore (data = read(dst)matlab.io.datastore.SimulationDatastore объект). Последующие вызовы read функция продолжает считывать из конечной точки предыдущего вызова. Используйте ReadSize свойство SimulationDatastore объект, чтобы задать объем данных, в выборках (временных шагах), для чтения за раз. Используйте progress метод и NumSamples свойство для определения текущей позиции чтения.
[ также возвращает информацию об извлеченных данных в data,info]
= read(dst)info.
dst - Входной datastorematlab.io.datastore.SimulationDatastore объектВведите datastore, заданный как matlab.io.datastore.SimulationDatastore объект. Как создать SimulationDatastore объект, см. matlab.io.datastore.SimulationDatastore.
data - Выходные данныеtimetable объектВыходные данные, возвращенные как timetable объект. Для получения информации о timetable, см. Timetables.
info - Информация о считанных данныхИнформация о считанных данных, возвращенная как структура. Структура имеет одно поле, FileName, который является полностью разрешенным путем, содержащим строку пути, имя файла и расширение файла.
В этом примере показано, как логгировать большие данные из симуляции и просматривать и анализировать фрагменты этих данных путем взаимодействия с matlab.io.datastore.SimulationDatastore объект.
Логгирование Больших данных из модели
Откройте пример модели sldemo_fuelsys.
open_system('sldemo_fuelsys')

Выберите Configuration Parameters > Data Import/Export > Log Dataset data to file.
set_param('sldemo_fuelsys','LoggingToFile','on')
Симулируйте модель.
sim('sldemo_fuelsys')
Файл MAT out.mat появится в текущей папке. Файл содержит данные для записанных сигналов, таких как fuel (который находится на корневом уровне модели).
В командной строке создайте DatasetRef объект, который ссылается на переменную регистрации по имени, sldemo_fuelsys_output.
DSRef = Simulink.SimulationData.DatasetRef('out.mat','sldemo_fuelsys_output');
Предварительный просмотр Больших данных
Используйте фигурные скобки ({ и }) для извлечения сигнального элемента fuel, который является десятым элементом в DSRef, как Simulink.SimulationData.Signal объект, который содержит SimulationDatastore объект.
SimDataSig = DSRef{10};
Чтобы легче взаимодействовать с SimulationDatastore объект, который находится в Values свойство Signal объект, храните указатель в переменной с именем DStore.
DStore = SimDataSig.Values;
Используйте preview метод для проверки первых пяти выборок записанных данных для fuel сигнал.
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
Осмотрите конкретную выборку
Проверьте 603-ю выборку записанных fuel данные.
Установите ReadSize свойство DStore для числа, которое, учитывая ресурсы памяти, компьютер может терпеть. Для примера задайте ReadSize на 200.
DStore.ReadSize = 200;
Прочитайте из datastore три раза. Каждая операция считывания совершенствует положение считывания на 200 выборки.
read(DStore); read(DStore); read(DStore);
Теперь, когда вы очень близки к 603-й выборке, установите ReadSize на меньшее число. Для примера задайте ReadSize на 5.
DStore.ReadSize = 5;
Еще раз прочитайте из datastore.
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
Третьей выборкой считанных данных является 603-я выборка в datastore.
Осмотрите более раннюю выборку
Осмотрите 403-ю выборку записанных fuel данные. Из-за предыдущих операций чтения datastore теперь читается начиная с 606-ой выборки, поэтому вы должны сбросить datastore. Затем можно считать из первой выборки до 403-й выборки.
Используйте reset метод сброса DStore.
reset(DStore);
Задайте ReadSize на 200 снова.
DStore.ReadSize = 200;
Дважды считывайте из datastore, чтобы продвинуть положение считывания до 401-й выборки.
read(DStore); read(DStore);
Задайте ReadSize на 5 снова.
DStore.ReadSize = 5;
Прочитайте из datastore.
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 выборки).
Сбросьте datastore.
reset(DStore)
Переходите к выборке 1001.
DStore.ReadSize = 200; for i = 1:5 read(DStore); end
Подготовьтесь к извлечению 20 выборок из datastore.
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
Нахождение максимального значения данных в Datastore
Сбросьте datastore.
reset(DStore)
Написание while цикл, использование hasdata метод, для пошагового анализа данных в фрагментах по 200 выборок.
DStore.ReadSize = 200; runningMax = []; while hasdata(DStore) tt = read(DStore); rawChunk = tt.Data; runningMax = max([rawChunk; runningMax]); end
Теперь переменная runningMax сохраняет максимальное значение во всем datastore.
runningMax
runningMax =
1.6423
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.