主要内容

matlab.io.datastore类

包裹:matlab.io

基本数据存储类

描述

matlab.io.datastore是用于创建自定义数据存储的抽象类。数据存储有助于迭代地访问大量数据,尤其是当数据太大而无法适应内存时。这数据存储抽象类声明并捕获MATLAB中所有自定义数据存储的预期接口®。使用此语法得出类:

ClassDefmydatastore
             

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

  • 从班级继承matlab.io.datastore

  • 定义四个必需的方法:hasdata,,,,,,,,重置, 和进步

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

方法

从数据存储中读取数据。

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

数据输出可以是任何数据类型,并且必须在垂直上可以屈服。最好的做法是退还信息输出作为结构。

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

访问:公共,,,,摘要:正确

hasdata

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

tf = hasdata(ds)

访问:公共,,,,摘要:正确

重置

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

重置(DS)

访问:公共,,,,摘要:正确

进步

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

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

P =进度(DS)

访问:公共,,,,摘要:正确,,,,隐藏:正确

预习

返回数据的子集。

数据=预览(DS)

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

默认实现的预习方法未针对高阵列结构进行优化。为了改善高阵列性能,请根据数据优化实现。

访问:公共

读取

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

data = readall(ds)

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

默认实现的读取方法未针对高阵列结构进行优化。为了改善高阵列性能,请根据数据优化实现。

访问:公共

结合

结合来自多个数据存储的数据。

dsNew = combine(ds1,ds2,...,dsn)

输出DSNew是一个具有组合数据的新数据存储,返回为组合的datastore目的。

访问:公共

转换

转换数据存储。

dsNew =变换(DS,@fcn)

输出DSNew是一个具有转换数据的新数据存储,返回为变换的达塔斯托尔目的。

访问:公共

可以分配

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

tf = iSpartientable(DS)

访问:公共

可观

确定数据存储是否可以改组。输出类型为逻辑。

tf = Isshufflable(DS)

访问:公共

特性

要将属性添加到自定义数据存储中,您必须实现复印件方法。例如,如果您使用dsfileset对象是自定义数据存储中的属性,然后实现复印件方法。实施复印件方法使您可以创建数据存储对象的深层副本。有关更多信息,请参阅自定义复制操作。为了实现复印件方法,请参阅开发自定义数据存储

属性

密封 错误的

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

例子

全部收缩

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

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

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

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

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

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

%%步骤1:从数据存储类继承ClassDefmydatastore 特性(访问=私有)CurrentFileIndex双倍的文件集matlab.io.datastore.dsfileset结尾%属性以支持节省,加载和处理万博1manbetx在不同的文件系统机器或群集上的%数据存储。%此外,定义方法get.AlternateFilesystemroots()%and set.AlternateFilesystemroots()在“方法”部分中。特性(依赖)替代filesystemroots结尾%%步骤2:定义构造函数和所需方法方法%定义您的数据存储构造函数功能myds = mydatastore(位置,屈服)myds.fileset = matlab.io.datastore.dsfileset(位置,...“ fileextensions',,,,'。垃圾桶',,,,...“ fileplitsize',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([[“没有更多的数据可以读取。\ nuse repent',,,,...“将数据存储重置为开始的方法”,,,,...'数据。\ nbe在调用读取方法之前,,,,,...“检查数据是否可以读取”,,,,...“通过使用Hasdata方法。”)))结尾fileInfotbl = nextFile(myds.fileset);data = myFilereAder(fileInfotbl);info.size = size(data);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;结尾%getter for SelternateFilesystemroots属性功能Altroots = get.AlternateFilesystemroots(myds)Altroots = myds.fileset.alternatefilesystemrots;结尾替代filesystemroots属性的%setter功能set.AlternateFilesystemroots(myds,piltroots)尝试%dsfileset对象管理替代filesystemrotsroots数据存储的%myds.fileset.AlternateFilesystemroots = Altroots;%重置数据存储重置(myds);抓住我扔(我);结尾结尾结尾方法(隐藏= true)%定义进度方法功能frac =进度(myds)%确定从数据存储中读取的数据百分比如果hasdata(myds)frac =(myds.currentfileindex-1)/...myds.fileset.numfiles;别的frac = 1;结尾结尾结尾方法(访问=受保护)%如果您在数据存储中使用Fileset属性,%然后您必须定义复印方法。这%copolement方法允许诸如readall之类的方法%并预览保持无状态功能dscopy = copyElement(ds)dscopy = copyElement@matlab.mixin.copyable(ds);dscopy.fileset = copy(ds.fileset);结尾结尾结尾%%步骤3:实现您的自定义文件阅读功能功能data = myfilereader(fileInfotbl)%使用文件名创建阅读器对象阅读器= matlab.io.datastore.dsfileReader(fileInfotbl.fileName);%寻求偏移搜索(读者,fileinfotbl.offset,'起源',,,,“文件开始”);%读取fileInfotbl.splitsize数据量data = read(读取器,fileInfotbl.splitsize);结尾

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

使用自定义数据存储预览并将您的专有数据读取到MATLAB中进行串行处理。

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

dir('*。垃圾桶'
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,请参见示例构建数据存储以读取二进制文件

文件夹= fullfile('*。垃圾桶');ds = mydatastore(文件夹);

从数据存储中预览数据。

预览(DS)
ans =8x1 UINT8列矢量113 180 251 91 29 66 254 214

阅读数据尽管循环并使用hasdata检查是否可以阅读更多数据。

尽管hasdata(ds)data = read(ds);% 做一点事结尾

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

重置(DS);data = read(ds);

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

dataall = readall(ds);谁是Dataall
名称大小字节类属性dataall 150000x1 150000 uint88

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

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

  • “ z:\ dataset”在您本地的Windows机器上

  • “/nfs-bldg001/dataset”在您的Linux群集上

然后,使用替代filesystemroots财产。用于实施细节mydatastore,请参见示例构建数据存储以读取二进制文件

极限= [“ z:\ dataset”,,,,“/nfs-bldg001/dataset”];ds = mydatastore('z:\ dataset \*。bin',略微);

检查数据存储中的文件。

filetbl = resolve(ds.fileset);Filetbl.FileName
ans = 12×1个单元格数组{'z:\ dataset \ binary_data01.bin'} {'z:\ dataset \ binary_data02.bin'} {'z:\ dataset \ biary_data03.bin'}。。。

保存数据存储。

节省ds_saved_on_windows.matDS

将数据存储加载到Linux平台上,并检查数据存储中的文件。由于根路径'z:\ dataset'在加载时间无法在Linux群集上访问,数据存储函数会根据在替代filesystemroots财产。

加载ds_saved_on_windows.matfiletbl = resolve(ds.fileset);Filetbl.FileName
ANS = 12×1个单元格数组{'/nfs-bldg001/dataset/binary_data01.bin'} {'/nfs-bldg001/dataset/binary_data02.bin'} {。。
现在,您可以在Linux计算机上处​​理并分析此数据存储。

在R2017b中引入