主要内容

matlab.io.Datastore类

包裹:matlab.io.

基本数据存储类

描述

matlab.io.Datastore是创建自定义数据存储的抽象类。数据存储有助于迭代地访问大量数据集合,尤其是当数据太大而无法适合内存时。这数据存储Abstract类声明并捕获Matlab中所有自定义数据存储所期望的接口®. 使用以下语法派生类:

Classdef.MyDatastore
            

要实现自定义的数据存储:

  • 从类继承matlab.io.Datastore

  • 定义四种必需的方法:哈迪塔重置, 和进步

有关创建自定义数据存储的更多详细信息和步骤,请参阅开发自定义数据存储

方法

阅读从数据存储中的数据。

[数据,信息] =读取(DS)

数据输出可以是任何数据类型,并且必须是垂直concatenateable。最佳做法是返回信息输出作为结构。

输出的数据类型数据决定了输出的数据类型功能。

通道:公开摘要:没错

哈迪塔

确定数据是否可用读取。输出为逻辑类型。

tf=hasdata(ds)

通道:公开摘要:没错

重置

在读取任何数据之前将数据存储重置为初始状态。

复位(DS)

通道:公开摘要:没错

进步

确定已经读取了多少数据。

输出是标量双倍0.1. 返回值为0.55意味着您已阅读55%的数据。

P =进展(DS)

通道:公开摘要:没错隐藏:真

预览

返回数据的子集。

数据=预览(ds)

默认实现返回前八行数据。输出具有与输出相同的数据类型

默认实施预览对于高阵列结构,不优化方法。为了提高高阵列性能,根据您的数据优化实现。

通道:公开

读物

阅读数据存储的所有数据。

DATA = READALL(DS)

输出具有与输出相同的数据类型。如果数据不适合在内存中,读物返回一个错误。

默认实施读物对于高阵列结构,不优化方法。为了提高高阵列性能,根据您的数据优化实现。

通道:公开

结合

将数据与多个数据存储组合。

dsnew =组合(DS1,DS2,...,DSN)

输出dsnew与组合的数据,返回为新的数据存储CombinedDatastore目的。

通道:公开

转变

变换的数据存储。

dsnew = transform(ds,@ fcn)

输出dsnew是一个具有变换数据的新数据存储,返回为aTransformedDatastore目的。

通道:公开

isPartitionable

确定数据存储是否分区。输出为逻辑类型。

tf = IsPartionable(DS)

通道:公开

isShufflable.

确定数据存储是否可洗牌。输出为逻辑类型。

TF = isShuffleable(DS)

通道:公开

特性

要向自定义数据存储添加句柄属性,必须实现copyElement方法。例如,如果你使用dsfileset.对象作为您的自定义数据存储中的属性,然后实现copyElement方法。实施copyElement方法使您可以创建数据存储对象的深度副本。有关更多信息,请参阅自定义复制操作。举一个例子实施copyElement方法,请参阅开发自定义数据存储

属性

密封 错误的

有关类属性的信息,请参阅类属性

例子

全部收缩

构建数据存储,以将您的自定义或专有数据带入Matlab®进行串行处理。

创建一个.m类定义文件,其中包含实现自定义数据存储的代码。必须将此文件保存在工作文件夹或MATLAB®路径上的文件夹中。名称.m文件必须与对象构造函数的名称相同。例如,如果您希望构造函数函数具有MyDataStore的名称,那么该名称.m文件必须是MyDatastore.m. 这个.m类定义文件必须包含以下步骤:

  • 步骤1:从继承数据存储类。

  • 步骤2:定义构造函数和所需的方法。

  • 第3步:定义您的自定义文件阅读功能。

除了这些步骤外,定义您需要处理和分析数据所需的任何其他属性或方法。

%%步骤1:继承DATASTORE CLASSESClassdef.mydatastore 特性(ACCESS =私人)CurrentFileIndex双倍的文件集matlab.io.datastore.dsfileset.结尾%属性以支持存储、加载和处理金宝app不同文件系统计算机或群集上的%数据存储。%另外,定义get.AlternateFileSystemRoots()方法方法部分中的%和set.alternatefilesystemroots()。特性(从属)交替无系统根结尾%% 2步:定义构造函数和所需的方法方法%定义您的数据存储构造功能myds=MyDatastore(location,altroot)myds.FileSet=matlab.io.datastore.DsFileSet(location,......“文件扩展名”'.bin'......'FileSplitSize',8 * 1024);myds.currentfileIndex = 1;如果nargin == 2 myds.alternatefilesystemroots = altroots;结尾复位(myds);结尾%定义hasdata方法功能TF = hasdata(myds)%返回true,如果更多数据tf = hasfile(myds.fileset);结尾%定义读取方法功能[数据,信息] =读(myds)%读取数据和有关提取数据的信息%另见:myfilereader()如果〜hasdata(myds)误差(sprintf的(['没有更多要读取的数据。\n使用重置'......“方法到数据存储重置为开始”......'数据。\ nbefore调用读取方法,'......“如果检查数据可用来读”......“通过使用hasdata方法。”]))结尾fileinfotbl = nextfile(myds.fileset);data = myfilereader(fileinfotbl);info.size = size(数据);info.filename = fileinfotbl.filename;info.offset = fileinfotbl.offset;%更新CurrentFileIndex的进展跟踪如果fileinfotbl.offset + fileinfotbl.splitsize> =......fileinfotbl.filesize myds.currentfileIndex = myds.currentfileIndex + 1;结尾结尾%定义复位方法功能复位(myds)%重置为数据的开始重置(Myds.fileset);myds.currentfileIndex = 1;结尾%返回一个适合AlternateFileSystemRoots财产功能altRoots=get.AlternateFileSystemRoots(myds)altRoots=myds.FileSet.AlternateFileSystemRoots;结尾%二传手的AlternateFileSystemRoots财产功能set.alternatefilesystemroots(Myds,Altroots)尝试%的DsFileSet对象管理AlternateFileSystemRoots%用于数据存储myds.FileSet.AlternateFileSystemRoots = altRoots;%重置数据存储复位(myds);抓住我扔(我);结尾结尾结尾方法(隐藏=真)%定义进度方法功能压裂=进展(myds)%确定百分比的数据从数据存储器读如果hasdata(myds)frac=(myds.CurrentFileIndex-1)/......myds.FileSet.NumFiles;别的Frac = 1;结尾结尾结尾方法(接入=保护)%如果使用文件集属性的数据存储,%,那么你必须定义copyElement方法。这%copyElement方法允许方法如readall%和预览保持无国籍功能dscopy=copyElement(ds)dscopy=copyElement@matlab.mixin.Copyable(ds);dscopy.FileSet=copy(ds.FileSet);结尾结尾结尾%%步骤3:实现自定义文件读取功能功能data = myfilereader(fileinfotbl)%创建使用文件名的读取器对象reader = matlab.io.datastore.dsfilereader(fileinfotbl.filename);%寻求补偿求(读卡器,fileInfoTbl.Offset,'起源'“文件开始”);%读取的数据的量fileInfoTbl.SplitSize数据=读取(读卡器,fileInfoTbl.SplitSize);结尾

您的自定义数据存储现在已准备就绪。用MyDatastore创建用于读取二进制数据文件的数据存储对象。

使用自定义数据存储预览和阅读你的专有数据到MATLAB进行串行处理。

此示例使用一个简单的数据集使用自定义数据存储来说明工作流程。该数据集是15二进制的集合(.bin.)每个文件包含列的文件(1变量)和10000无符号整数的行(记录)。

dir(“*.bin”
binary_data01.bin binary_data05.bin binary_data09.bin binary_data13.bin binary_data02.bin binary_data06.bin binary_data10.bin binary_data14.bin binary_data03.bin binary_data07.bin binary_data11.bin binary_data15.bin binary_data04.bin binary_data08.bin binary_data12.bin

使用MyDatastore功能。详情请参阅MyDatastore,请参见示例构建数据存储读取二进制文件

folder = fullfile(“*.bin”);DS = MyDatastore(文件夹);

预览数据存储区中的数据。

预览(DS)
ans =.8X1 UINT8列向量113 180 251 91 29 66 254 214

阅读中的数据尽管环和使用哈迪塔方法检查是否有更多数据可读取。

尽管hasdata(DS)数据=读(DS);% 做点什么结尾

将数据存储重置为其初始状态,并从数据存储的开头读取数据。

复位(DS);数据=读(DS);

或者,如果您的数据收集适合内存,则读取数据存储区中的所有数据。由于文件夹包含15.使用文件10000每个文件中的记录,输出的大小应该是150000记录。

dataall = Readall(DS);谁是数据全部
名称大小字节类属性dataAll 15000x1 150000 uint8

创建自定义的数据存储对象,将其保存在Windows®然后在Linux上加载和处理它®机器。

在创建和保存自定义数据存储之前,请在不同平台上标识数据的根路径。根路径基于机器或文件系统而不同。例如,如果您使用这些根路径访问数据:

  • “Z:\DataSet”在本地Windows计算机上

  • “/ NFS-bldg001 /数据集”你的Linux集群上

然后,使用这些根路径相关联交替无系统根财产。为了实现细节MyDatastore,请参见示例构建数据存储读取二进制文件

altroots = [“Z:\DataSet”“/ NFS-bldg001 /数据集”];DS = MyDatastore('Z:\数据集\ *本',altRoots);

检查数据存储中的文件。

fileTbl =解析(ds.Fileset);fileTbl.FileName
ANS = 12×1单元阵列{ 'Z:\数据集\ binary_data01.bin'} { 'Z:\数据集\ binary_data02.bin'} { 'Z:\数据集\ binary_data03.bin'}。。。

保存数据存储。

节省ds_saved_on_Windows.matDS.

在Linux平台上加载数据存储并检查数据存储中的文件。自根路径'Z:\数据集'在加载时间的Linux集群上无法访问,数据存储函数根据指定的值自动更新根路径交替无系统根财产。

加载ds_saved_on_Windows.matfileTbl =解析(ds.Fileset);fileTbl.FileName
ans = 12×1单元阵列{'/nfs-bldg001/dataset/binary_data01.bin'} {'/nfs-bldg001/dataset/binary_data02.bin'} {'/nfs-bldg001/dataset/binary_data03.bin'}。。。
您现在可以在Linux机器上流程和分析此数据存储。

在R2017B中介绍