主要内容

matlab.io.Datastoreclass

包:matlab.io

基本数据存储类

描述

matlab.io.Datastore是一个抽象类来创建一个定制的数据存储。数据存储帮助迭代地访问大量数据,特别是当数据装入内存太大。的数据存储抽象类声明和捕获所有自定义的接口将数据存储在MATLAB®。派生类使用这个语法:

classdefMyDatastore< matlab.io。数据存储…结束

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

为更多的细节和步骤来创建自定义数据存储,明白了开发自定义数据存储

方法

从数据库读取数据。

(数据、信息)=阅读(ds)

数据输出可以是任何数据类型,必须垂直concatenateable。最佳实践是返回信息输出为一个结构。

输出的数据类型数据命令的输出的数据类型函数。

访问:公共,文摘:真正的

hasdata

确定数据可用来读。输出类型的逻辑。

tf = hasdata (ds)

访问:公共,文摘:真正的

重置

重置数据存储任何数据读取前一个初始状态。

重置(ds)

访问:公共,文摘:真正的

进步

确定多少数据已经阅读。

输出是一个标量之间的两倍01。的返回值0.55意味着你已经读过55%的数据。

p =进步(ds)

访问:公共,文摘:真正的,隐藏:真

预览

返回数据的一个子集。

data =预览(ds)

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

默认的实现预览方法不适合个子高的阵列结构优化。为改善高阵列性能,优化您的实现基于您的数据。

访问:公共

readall

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

data = readall (ds)

输出具有相同的数据类型作为输出。如果数据不符合在内存中,readall返回一个错误。

默认的实现readall方法不适合个子高的阵列结构优化。为改善高阵列性能,优化您的实现基于您的数据。

访问:公共

结合

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

dsnew =结合(ds1, ds2,…, dsN)

输出dsnew是一种新的数据存储与数据相结合,作为一个返回CombinedDatastore对象。使用ReadOrder = "序列"名称-值参数返回一个SequentialDatastore对象,按顺序读取数据。

访问:公共

变换

转换数据存储。

@fcn dsnew =变换(ds)

输出dsnew是一种新的数据存储与转换数据,作为一个返回TransformedDatastore对象。

访问:公共

isPartitionable

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

tf = isPartitionable (ds)

访问:公共

isSubsettable

确定是否subsettable数据存储。输出类型的逻辑。

tf = isSubsettable (ds)

访问:公共

isShuffleable

确定是否shuffleable数据存储。输出类型的逻辑。

tf = isShuffleable (ds)

访问:公共

属性

将处理属性添加到您的自定义数据存储,你必须实现copyElement方法。例如,如果您使用DsFileSet在您的自定义数据存储对象作为一个属性,然后实现copyElement方法。实现copyElement方法使您能够创建一个深拷贝的数据存储对象。有关更多信息,请参见自定义复制操作。的一个示例实现copyElement方法,请参阅开发自定义数据存储

属性

密封

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

例子

全部折叠

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

创建一个。m类定义文件,其中包含的代码实现您的自定义数据存储。你必须保存这个文件在您的工作目录或文件夹,在MATLAB®路径。的名称。m文件必须与你的对象构造函数的名称。例如,如果你想让你的构造函数名称MyDatastore,然后的名称。m文件必须MyDatastore.m。的。m类定义文件必须包含以下步骤:

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

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

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

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

% %步骤1:从数据存储类继承classdefMyDatastore < matlab.io.Datastore属性(访问=私人)CurrentFileIndex文件集matlab.io.datastore.DsFileSet结束%属性支持储蓄、加载和处理金宝app%或集群文件系统数据存储在不同的机器。%此外,定义方法get.AlternateFileSystemRoots ()%和set.AlternateFileSystemRoots()方法部分。属性(依赖)AlternateFileSystemRoots结束% %步骤2:定义构造函数和所需的方法方法%定义数据存储的构造函数函数myds = MyDatastore(位置,altRoots) myds。文件集= matlab.io.datastore.DsFileSet(location,“FileExtensions”,“。斌”,“FileSplitSize”8 * 1024);myds。CurrentFileIndex = 1;如果输入参数个数= = 2 myds。AlternateFileSystemRoots = altRoots;结束重置(myds);结束%定义hasdata方法函数tf = hasdata (myds)%返回true,如果更多的数据是可用的tf = hasfile (myds.FileSet);结束%定义读取方法函数(数据、信息)=阅读(myds)%读取数据和信息提取的数据%参见:MyFileReader ()如果~ hasdata (myds)错误(sprintf ([没有更多的数据来读。\ nUse重置”,的方法来重置数据存储的开始,的数据。\ nBefore调用读方法,,检查数据是否可读的,“通过使用hasdata方法。”)))结束fileInfoTbl = nextfile (myds.FileSet);data = MyFileReader (fileInfoTbl);信息。大小=大小(数据);信息。文件名= fileInfoTbl.FileName;信息。抵消= fileInfoTbl.Offset;%更新CurrentFileIndex跟踪进展如果fileInfoTbl。抵消+ fileInfoTbl。SplitSize > =fileInfoTbl。文件大小myds。CurrentFileIndex = myds。CurrentFileIndex + 1;结束结束%定义的复位方法函数重置(myds)%开始重置数据重置(myds.FileSet);myds。CurrentFileIndex = 1;结束% Getter AlternateFileSystemRoots财产函数altRoots = get.AlternateFileSystemRoots (myds) altRoots = myds.FileSet.AlternateFileSystemRoots;结束% AlternateFileSystemRoots属性的Setter函数set.AlternateFileSystemRoots (myds altRoots)试一试%管理AlternateFileSystemRoots DsFileSet对象%为您的数据存储myds.FileSet。AlternateFileSystemRoots = altRoots;%重置数据存储重置(myds);我把(我);结束结束结束方法(隐藏= true)%定义方法的进展函数压裂=进步(myds)%的比例确定数据读取数据存储如果hasdata (myds)压裂= (myds.CurrentFileIndex-1) /myds.FileSet.NumFiles;其他的压裂= 1;结束结束结束方法(访问=保护)%如果使用数据存储的文件集的属性,%然后您必须定义copyElement方法。的% copyElement方法允许readall等方法%,预览是无状态的函数dscopy = copyElement (ds) dscopy = copyElement@matlab.mixin.Copyable (ds);dscopy。文件集= (ds.FileSet)复印件;结束结束结束% %步骤3:实现您的自定义文件阅读功能函数data = MyFileReader (fileInfoTbl)%使用文件名创建一个读者对象读者= matlab.io.datastore.DsFileReader (fileInfoTbl.FileName);%寻求偏移量寻求(读者,fileInfoTbl.Offset“起源”,“start-of-file”);% fileInfoTbl阅读。SplitSize的数据量data =阅读(读者,fileInfoTbl.SplitSize);结束

您的自定义数据存储现在准备好了。使用MyDatastore创建一个数据存储对象读取二进制数据文件。

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

这个例子使用一个简单的数据集来说明一个工作流使用您的自定义数据存储。15个二进制的数据集是一组(。斌)文件,每个文件包含一个列(1变量)和10000年行(记录)的无符号整数。

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

创建一个数据存储对象使用MyDatastore函数。的实现细节MyDatastore,请参阅示例构建数据存储读取二进制文件

文件夹= fullfile (“*。斌”);ds = MyDatastore(文件夹);

预览数据存储的数据。

预览(ds)
ans =8 x1 uint8列向量113 180 251 91 66 254 214

读取数据循环使用hasdata方法检查更多的数据是否可读。

hasdata (ds)数据=阅读(ds);%做某事结束

重置初始状态的数据存储和读取数据从数据存储的开始。

重置(ds);data =阅读(ds);

另外,如果你的数据收集适合在内存中,那么阅读所有的数据存储中的数据。自文件夹包含15文件10000年记录在每个文件的大小应该输出150000年记录。

dataAll = readall (ds);谁dataAll
类属性名称大小字节dataAll 150000 150000 uint8 x1

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

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

  • “Z: \数据集”在本地Windows机器

  • “nfs-bldg001 /数据集”在你的Linux集群

然后,将使用这些根路径AlternateFileSystemRoots财产。的实现细节MyDatastore,请参阅示例构建数据存储读取二进制文件

altRoots = [“Z: \数据集”,“nfs-bldg001 /数据集”];ds = MyDatastore (“数据集Z: \ \ *。斌”,altRoots);

检查文件的数据存储。

fileTbl =解决(ds.Fileset);fileTbl.FileName
ans = 12×1单元阵列{' Z: \数据集\ binary_data01。本的}{数据集的Z: \ \ binary_data02。本的}{数据集的Z: \ \ binary_data03。本”}。

保存数据存储。

保存ds_saved_on_Windows.matds

在Linux平台上加载数据存储在数据存储和检查文件。因为根路径Z: \数据集的不可以在Linux集群在加载时,自动更新数据存储功能的根路径基于中指定的值AlternateFileSystemRoots财产。

负载ds_saved_on_Windows.matfileTbl =解决(ds.Fileset);fileTbl.FileName
ans = 12×1单元阵列{' / / binary_data01 nfs-bldg001 /数据集。本的}{' / / binary_data02 nfs-bldg001 /数据集。本的}{' / / binary_data03 nfs-bldg001 /数据集。本”}。
你现在可以处理和分析这个数据存储在您的Linux机器上。

版本历史

介绍了R2017b