Класс: 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.