文档

加载大数据模拟

带有许多时间步长和信号的模型模拟可能涉及大数据,大到无法放入计算机的RAM中。这种情况包括:

  • 测井模拟数据(信号测井、输出测井和状态测井)

  • 加载用于模拟模型的输入信号数据

  • 平行模拟

要使用模拟大数据,请将数据存储在mat文件中(参见将日志数据保存到持久存储).使用大数据技术进行模拟需要额外的步骤,而不需要工作空间内存和块等信号数据从文件从电子表格可以处理。在开发模型时,请考虑在不使用持久存储的情况下记录和加载模拟数据,除非您发现模型的大数据需求会导致内存过载。

您可以使用从一个模拟中记录到持久存储的数据作为另一个模拟的输入。你可以用matlab.io.datastore.SimulationDatastore对象在一个万博1manbetxSimulink.SimulationData.Dataset对象以将数据流输入根轮廓尺寸块。创建SimulationDatastore对象的叶信号万博1manbetxSimulink.SimulationData.DatasetRef对象的索引DatasetRef对象。

SimulationDatastore以小块的形式输入数据流(默认情况下,每次100个样本)。根据仿真的需要加载数据。信号的全部数据永远不会完全加载到内存中。

为加载准备数据集数据

第一步是创建一个万博1manbetxSimulink.SimulationData.Dataset对象的信号数据加载到根级输入端口。您可以使用记录到一个模拟中的持久存储中的数据作为另一个模拟的输入。或者,您可以创建数据集在MATLAB对象®(见为根级导入创建数据集对象

然后创建万博1manbetxSimulink.SimulationData.DatasetRef对象,用于加载单个信号的数据。

加载数据:

  • 你可以使用负载命令载入数据集对象从一个持久存储的mat -文件转换为模型。整个数据集被加载到内存中,所以对于大数据来说,这不是一个好的方法。

  • 为了避免在加载大数据时溢出内存,可以使用这些方法中的一种进行流处理数据集将数据转换为模型进行仿真:

    • 为流创建数据tref对象

      流一DatasetRef对象直接进入模型是一种更简单的方法。

    • 为流创建simulationdatastore

      流一matlab.io.datastore.SimulationDatastore对象中包含的数据集对象可以让你更多地控制流。你也可以用aSimulationDatastore对象创建MATLAB高时间表对象,直接使用MATLAB工具进行大数据处理。

为根级导入创建数据集对象

将大数据加载到根级轮廓尺寸块在模型中,创建数据集具有相同数量元素的对象轮廓尺寸块。元素的顺序必须与轮廓尺寸块在模型中。你可以使用空数组([])来使用an的接地值轮廓尺寸块。您可以使用从另一个模拟(存储在mat文件中)记录到持久存储的数据,也可以手动创建Dataset对象。

创建一个数据集对象,则可以使用createInputDataset函数创建数据集对象,该对象包含与轮廓尺寸模型中的块。生成的数据集中的信号具有根导入的属性以及模型开始和停止时相应的地面值。

万博1manbetx®使用接地值为任何轮廓尺寸未在相应的块中指定数据的块数据集元素。

对于单个非总线信号数据,可以指定这些数据类型数据集元素:

  • timeseries

  • 时间表

  • matlab.io.datastore.SimulationDatastore

  • 向量或结构数据

  • 一个万博1manbetxSimulink.SimulationData.Signal万博1manbetxSimulink.SimulationData.State,或万博1manbetxSimulink.SimulationData.DataStoreMemory对象

  • 满足以下要求之一的数组:

    • 一个数组,第一列为时间,其余列分别对应一个输入端口。看到将数据数组加载到根级输入

    • 一个资料片用于驱动函数调用子系统的根导入的数组。

  • 结构——看将数据结构加载到根级输入

对于总线信号,为每个叶信号使用一个带有数据元素的结构,使用以下格式之一:

  • 一个MATLABtimeseries对象

  • 一个MATLAB时间表对象

  • 一个matlab.io.datastore.SimulationDatastore对象

  • 空矩阵

  • 另一种结构,每个信号的数据元素与总线数据结构的这些要求一致

请注意

当你指定时间表作为元素数据集或者是公共汽车时间表必须只包含一个信号的数据。

这个例子展示了如何创建一个数据集包含混合物的对象timeseriesSimulationDatastore数据类型。对于这个例子,假设你有两个数据集:

  • ds3——存储在dataFileName.mat

  • in_mem_ds-保存在内存为dataFileName2

  1. 创建一个DatasetRefds3和负载in_mem_ds到内存中。

    安全域= S万博1manbetximulink.SimulationData.DatasetRef (dataFileName,“ds3”);in_mem_ds =负载(dataFileName2);
  2. 聚合下一个模拟的元素。使用一个内存信号,一个值为a的信号SimulationDatastore引用mat文件中的数据,以及一个原始数据SimulationDatastore没有万博1manbetxSimulink.SimulationData.Signal对象包装器。

    el1 = in_mem_ds.get (1);el2 =安全域{2};el3 =安全域{3}. values;谁el1el2el3
    名称大小字节类el1 1x1 664 Simulink.Simula万博1manbetxtionData.Signal el2 1x1 222 Simulink.SimulationData.Signal el3 1x1 8 matlab.io.datastore.SimulationDatastore . simulationdata . signal el3 1x1 8

  3. 创建一个数据集对象,并使用感兴趣的信号的元素填充它。

    input_ds = 万博1manbetxSimulink.SimulationData.Dataset;input_ds = input_ds.add (el1,“记忆价值”);input_ds = input_ds.add (el2,数据存储的值的);input_ds = input_ds.add (el3,原始数据存储的
    input_ds = 万博1manbetxSimulink. simulationdata . dataset Package: Simulink。模拟Data Characteristics: Name: '' Total Elements: 3 Elements: 1 : 'in memory values' 2 : 'datastore values' 3 : 'raw datastore'
  4. input_ds数据集作为外部输入。

    = sim卡(”mdl LoadExternalInput”“上”“ExternalInput”“input_ds”);

    模拟流的值由数据存储指定。

获取数据集变量列表

创建对持久存储的引用数据集对象在存储记录数据的mat -文件中的名称数据集变量。你可以使用万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames函数获取数据集在mat文件中的变量。

提示

使用万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames函数获取的名称数据集变量在MAT-file中的处理速度比使用功能。

为流创建数据tref对象

对于大数据,使用万博1manbetxSimulink.SimulationData.DatasetRef对象来访问数据集中特定类型的记录数据。的元素DatasetRef对象来访问特定信号的数据。

当您访问信号日志记录、输出或状态日志记录数据从一个mat文件通过日志记录到持久存储创建时,Simulink增量地将数据读入MATLAB工作空间(逐个信号)。万博1manbetx

当你使用DatasetRef对象引用mat文件中的数据以检索文件中的数据时,它检索数据的最新版本。

这个例子展示了如何构造和使用DatasetRef对象访问记录到持久存储的模型的数据。这个简单的示例展示了将日志记录到持久存储的基本步骤。这个示例并不代表将日志记录到持久存储的真实情况,因为它展示了一个内存需求很小的简短模拟。但是,您可以对大数据使用相同的工作流。

  1. 打开vdp模型。

  2. 配置参数>数据导入/导出窗格,选择这些参数:

    • Log数据集到文件

    设置格式参数数据集

    其他参数保持不变,单击应用

  3. 在模型中,单击一个信号,在操作栏中,选择启用数据日志记录

  4. 模拟模型。

  5. 得到一份数据集的变量名out.mat文件。在本例中,变量用于来自状态日志记录(xout)及信号测井(logsout).

    varNames = 万博1manbetxSimulink.SimulationData.DatasetRef.getDatasetVariableNames (“out.mat”
    varNames = 'xout' '注销'
  6. 创建对已记录状态数据的引用(xout)储存在out.mat

    statesLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”“xout”
    Simulink.Simula万博1manbetxtionData.DatasetRef特征:Location: out。名称BlockPath ____ _________ 1 " vdp/x1 2 " vdp/x2 .mat (/myDir/out.mat) Identifier: xout Resolved Dataset: 'xout' with 2 elements
  7. 中存储的信号记录数据创建一个引用out.mat.信号测井数据的变量为logsout

    sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”“logsout”
    sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef特征:位置:out。mat (/myFile/out.mat) Identifier: logsout Resolved Dataset: 'logsout' with 1 element Name BlockPath ____ _________ 1 x1 vdp/x1 . log .mat (/myFile/out.mat

  8. 使用DatasetRef访问信号记录的第一个元素数据集

    sigLogRef {1}
    ans = 万博1manbetxSimulink. simulationdata . signal Package: Simulink。模拟Data Properties: Name: 'x1' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1×1 matlab.io.datastore.SimulationDatastore]

为流创建simulationdatastore

您可以创建matlab.io.datastore.SimulationDatastore用于记录到持久存储的信号。你可以用SimulationDatastore对象的一个元素数据集对象,加载到模型中。但是,您不能加载数据存储对象直接导入模型。你也可以用aSimulationDatastore对象来创建一个MATLAB的高时间表对象。当你使用SimulationDatastore对象来访问通过日志记录到持久存储创建的mat文件中的数据,Simulink将信号的数据增量地读取到MATLAB工作空间(逐个示例)。万博1manbetx

假设你用out.mat中的示例中创建的文件为根级导入创建数据集对象.您可以创建SimulationDatastore对象中的第一个信号logsout数据集。你可以使用readsize函数与一个SimulationDatastore对象重置流的块大小。

sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”“logsout”);loggedSig1 = sigLogRef {1};loggedSig1。值
ans = SimulationDatastore with properties: ReadSize: 100 FileName: 'out.mat'

或者,您可以使用万博1manbetxSimulink.SimulationData.DatasetRef.getAsDatastore函数创建SimulationDatastore从一个DatasetRef对象。例如:

sigLogRef = 万博1manbetxSimulink.SimulationData.DatasetRef (“out.mat”“logsout”);loggedSig1 = sigLogRef.getAsDatastore (1);

如果你使用索引语法或万博1manbetxSimulink.SimulationData.DatasetRef.getAsDatastore方法来访问DatasetRef对象元素,则返回值为matlab.io.datastore.SimulationDatastore对象。例如:

loggedSig1。值

请注意

一个SimulationDatastore从内存流数据,而不是从mat -文件,当数据集对象,SimulationDatastore对象的构建满足以下任一条件:

  • 数据集对象在R2017a之前被保存到MAT-file。

  • 使用的mat文件不是一个v7.3的mat文件。

流数据到模型中

为了最小化所使用的内存量,可以将数据流从万博1manbetxSimulink.SimulationData.DatasetRef物体或从…matlab.io.datastore.SimulationDatastore对象中包含的数据集对象作为根级的模拟输入轮廓尺寸块。要做到这一点,就在输入配置参数时,指定DatasetRef数据集对象,该对象包含SimulationDatastore对象(或对象)。

加载记录数据存储内存数据

当您加载记录到持久存储的数据存储日志数据时,行为取决于加载期间使用的模拟模式。

  • 当您以普通模式加载数据存储日志数据时,Simulink将数据存储数据流输入模型。万博1manbetx

  • 在其他模拟模式中,所有记录的数据存储数据作为一个整体加载到内存中。

另请参阅

功能

相关的话题

这个话题有用吗?