主要内容

filedatastore.

带有自定义文件读取器的数据存储

描述

使用一个filedatastore.对象来管理集合不一定适合内存或大型自定义格式文件不适合内存时的大型自定义格式文件集合。您可以创建filedatastore.对象使用filedatastore.函数,指定其属性,然后使用对象函数导入和处理数据。

创建

描述

fds= filedataStore(位置“ReadFcn”,@fcn通过指定的文件集合创建数据存储位置并使用该功能fcn从文件中读取数据。

例子

fds= filedataStore(位置“ReadFcn”,@fcn名称,价值指定其他参数和属性为了fds使用一个或多个名称-值对参数。例如,可以根据文件的扩展名指定在数据存储中包含哪些文件fileDatastore(位置、“ReadFcn”@customreader FileExtensions,{“开头”、“.extx”})

输入参数

全部展开

数据存储中包含的文件或文件夹,指定为路径或dsfileset.对象。

  • path—将路径指定为字符向量、字符向量单元格数组、字符串标量或字符串数组,其中包含本地或远程文件或文件夹的位置。

    • 本地文件或文件夹-指定位置作为文件或文件夹的本地路径。如果文件不在当前文件夹中,则本地路径必须指定完整路径或相对路径。指定文件夹的子文件夹中的文件不会自动包含在数据存储中。指定本地路径时可以使用通配符(*)。此字符指定数据存储包含所有匹配的文件或匹配文件夹中的所有文件。

    • 远程文件或文件夹-指定位置将文件或文件夹的完整路径作为表单的统一资源定位符(URL)hdfs: / / / path_to_file.有关更多信息,请参见使用远程数据

  • dsfileset.object—你也可以指定位置作为一个dsfileset.对象。有关更多信息,请参见matlab.io.datastore.dsfileset.

位置表示文件夹时,该数据存储只包含支持的文件格式,而忽略任何其他格式。金宝app要指定要包含在数据存储中的文件扩展名的自定义列表,请参阅过滤义财产。

例子:“file1.ext”

例子:“. . / dir /数据/ file1.ext”

例子:{“C: \ dir \ data \ file1.exts”,“C: \ dir \ data \ file2.extx”}

例子:'c:\ dir \ data \ *。ext'

读取文件数据的函数指定为函数句柄。

由函数句柄表示的函数的签名@fcn取决于指定的值Readmode..读取文件数据的函数必须确认这些签名中的一个。

Readmode.

ReadFcn签名

“文件”(默认)

函数必须有这样的签名:

函数数据= myReadfcn(文件名)...结束

文件名—要读取的文件名。

数据—对应的文件数据。

'partialfile'

函数必须有这样的签名:

function [data,userdata,done] = MyReadFcn(filename,userdata)…结尾

用户数据—设置和读取字段用户数据在多个之间持久化数据filedatastore.读电话。

完成——设置这个逻辑参数要么真正的错误的

  • 错误的—继续读取当前文件。

  • 真正的—终止当前文件读取,并读取下一个文件。

数据-文件数据的一部分。

'字节'

函数必须有这样的签名:

函数数据= myReadfcn(文件名,偏移量,大小)...结束

抵消—指定文件中从第一个字节开始的字节偏移量。

尺寸- 在当前读取操作期间指定要读取的字节数。

数据—文件数据中指定大小的部分BlockSize

filedatastore.增加两个抵消尺寸中指定的值的输入BlockSize

中指定的值@fcn的值ReadFcn财产。

例子:@CustomReader.

数据类型:function_handle.

名称值对参数

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:fds = filedataStore('c:\ dir \ data','fileextensions',{'。exts','。extx'})

子文件夹包含标志,指定为由逗号分隔的对组成“IncludeSubfolders”真正的错误的, 0,或1。指定真正的包括每个文件夹中的所有文件和子文件夹或错误的只包含每个文件夹中的文件。

如果您未指定“IncludeSubfolders”,然后默认值是错误的

例子:“IncludeSubfolders”,真的

数据类型:逻辑|

自定义格式文件扩展名,指定为逗号分隔对,由“FileExtensions”以及字符向量、字符向量的单元数组、字符串标量或字符串数组。

指定文件扩展名时,filedatastore.函数仅为具有指定扩展名的文件创建数据存储对象。您还可以通过指定来为没有任何扩展名的文件创建数据存储“FileExtensions”作为空字符向量,''.如果您未指定“FileExtensions”, 然后filedatastore.自动包括文件夹中的所有文件。

例子:‘FileExtensions’。”

例子:“FileExtensions”、“开头”

例子:FileExtensions,{“开头”,“.extx”}

数据类型:字符|细胞|字符串

函数预览输入数据,指定为函数句柄。

如果不指定预览功能,filedatastore.中指定的值@ReadFcn作为默认预览功能。或者,您可以为您的数据指定自己的自定义预览功能。

  • @ReadFcn(默认)——使用ReadFcn样本filedatastore.数据。此选项可能导致性能较慢建设。

  • 函数处理-使用您的自定义预览功能filedatastore.构造以对输入数据进行抽样。用PreviewFcn提供一个函数,该函数只读取输入数据的最低需要的部分,以便预览和高层结构。

指定的函数PreviewFcn必须使用相同的数据类型返回值ReadFcn的回报。

数据类型:function_handle.

要读取的文件的一部分,指定为“文件”'partialfile',或'bytes'

“文件”(默认)

使用读模式“文件”中指定的自定义函数ReadFcn,在一次读操作中读取整个文件。

根据您定制的read函数,文件数据存储在每次调用时读取完整的文件.并行化的单位是完整的文件。

'partialfile'

使用读模式'partialfile'中指定的自定义文件读取函数ReadFcn,每次读取操作只读取文件的一部分。

基于您定制的read函数,文件数据存储在每次调用时只读取文件的一部分功能。

'partialfile'读模式下,并行化的单位是一个完整的文件。多个在串行中,操作是读取完整文件所必需的。

'bytes'

使用读模式'bytes'中指定的自定义函数ReadFcn,读BlockSize每次读取操作调整文件的大小。

filedatastore.将并行度单位设置为包含指定的字节数的文件块BlockSize

根据您定制的read函数,文件数据存储读取BlockSize每次调用read函数时调整文件的大小。多个需要并行操作以读取完整文件。

用来子集洗牌功能上的filedatastore.对象,则必须设置“ReadMode”“文件”

数据类型:字符|字符串

每次读取的字节数操作,指定为正整数。

确保您可以在多个并行MATLAB中分发文件的多个块®工人,指定BlockSize作为一个大于131072字节(128千字节)。

指定或更改值BlockSize,必须先定Readmode.'bytes'filedatastore.设置的默认值BlockSize基于所指定的值Readmode.

  • 如果Readmode.“文件”'partialfile', 然后filedatastore.设置默认值BlockSize

  • 如果Readmode.'bytes', 然后filedatastore.设置默认值BlockSize128兆字节。

备用文件系统根路径,指定为逗号分隔的对'alternedfilesystemroots'和字符串矢量或单元格数组。用'alternedfilesystemroots'当您在本地机器上创建数据存储,但需要访问和处理另一台机器(可能是不同的操作系统)上的数据时。此外,当使用Parallel Computing Toolbox™和MATLAB并行服务器™,数据存储在本地计算机上,使用不同平台云或群集计算机上可用的数据副本,您必须使用'alternedfilesystemroots'关联根路径。

  • 要关联一组等同于彼此的根路径,请指定'alternedfilesystemroots'作为串矢量。例如,

    [“z:\ datasets”,“/ mynetwork / datasets”]

  • 要关联多组等同于数据存储的根路径,请指定'alternedfilesystemroots'作为包含多行的单元格数组,其中每一行表示一组等价的根路径。将单元格数组中的每一行指定为字符串向量或字符向量的单元格数组。例如:

    • 指定'alternedfilesystemroots'作为字符串向量的单元格数组。

      {[Z: \“数据集”、“/ mynetwork /数据集”);…[" Y: \数据集”、“/ mynetwork2 /数据集”、“年代:\数据集”)}

    • 或者,指定'alternedfilesystemroots'作为字符向量的单元数组的单元数组。

      {{“Z: \数据集”、“mynetwork /数据集”},…{“Y: \数据集”,“mynetwork2 /数据集”,年代:\数据集的}}

的价值'alternedfilesystemroots'必须满足以下条件:

  • 包含一个或多个行,其中每行指定一组等效根路径。

  • 每行指定多个根路径,且每个根路径至少包含两个字符。

  • 根路径是唯一的,并且不是彼此的子文件夹。

  • 包含至少一个点指向文件位置的根路径条目。

有关更多信息,请参见设置数据存储,用于处理不同的机器或群集

例子:[“z:\ datasets”,“/ mynetwork / datasets”]

数据类型:字符串|细胞

属性

全部展开

filedatastore.属性描述与a关联的文件filedatastore.对象。除了文件属性时,可以指定的值filedatastore.使用名称-值对参数的属性。要在创建对象之后查看或修改属性,请使用点符号。

数据存储中包含的文件,解析为字符向量、字符向量的单元数组、字符串标量或字符串数组,其中每个字符向量或字符串都是文件的完整路径。这位置论点的filedatastore.数据存储函数定义文件创建数据存储时。

例子:{“C: \ dir \ data \ file1.ext”;“C: \ dir \ data \ file2.ext”}

例子:hdfs: / / /数据/ * .mat”

数据类型:字符|细胞|字符串

此属性是只读的。

用于构造数据存储的文件夹,作为字符向量的单元格数组返回。电池阵列定向为列向量。每个字符向量是包含数据文件的文件夹的路径。这位置论点的filedatastore.数据存储函数定义文件夹创建数据存储时。

文件夹属性在修改时将重置文件A的财产filedatastore.对象。

数据类型:细胞

读取文件数据的函数指定为函数句柄。

指定的值@fcn的值ReadFcn财产。

例子:@MyCustomFileReader

数据类型:function_handle.

此属性是只读的。

垂直连接的标志,指定为逻辑真正的错误的.属性时指定此属性的值filedatastore.对象。

真正的

多次读取filedatastore.对象返回垂直可连接的统一数据。

UniformRead属性值是真正的

  • ReadFcn函数必须返回垂直连接的数据;否则,读物方法将返回错误。

  • 属性的输出的基础数据类型功能与输出的数据类型相同ReadFcn

错误的(默认)

多次读取filedatastore.对象不返回垂直可连接的统一数据。

UniformRead属性值是错误的

  • 读物返回一个单元格数组。

  • 返回高级单元阵列。

例子:fds = fileDatastore(位置、“ReadFcn”@load, UniformRead,真的)

数据类型:逻辑|

此属性是只读的。

支持写入的格式列表,作为字符串的金宝app行向量返回。此属性指定使用时可能的输出格式reliteall.从数据存储写入输出文件。

数据类型:字符串

对象功能

哈迪塔 确定数据是否可用读取
numpartitions 数据存储分区数
分区 分区数据存储
预览 在数据存储区中预览数据子集
读取数据存储中的数据
读物 读取数据存储中的所有数据
reliteall. 将数据存储写入文件
重置 将数据存储重置为初始状态
变换 转换数据存储
结合 将数据与多个数据存储组合
isPartitionable 确定数据存储是否可分区
isShufflable. 确定数据存储是否会破坏
洗牌 在数据存储区中播放所有数据
子集 创建数据存储或文件集的子集

例子

全部收缩

为Matlab®中的文件创建数据存储区演示包含.mat扩展。

fds = fileDatastore (fullfile (matlabroot“工具箱”matlab的“演示”),'readfcn',@加载,“FileExtensions”“.mat”

创建包含所有的数据存储区.mat文件在MATLAB®演示文件夹中,指定加载函数读取文件数据。

fds = fileDatastore (fullfile (matlabroot“工具箱”matlab的“演示”),'readfcn',@加载,“FileExtensions”“.mat”

读取数据存储区中的第一个文件,然后读取第二个文件。

data1 =阅读(fds);data2 =阅读(fds);

同时读取数据存储中的所有文件。

readall (fds);

初始化单元格数组以保存数据和计数器一世

datarray = cell(numel(fds.Files), 1);i = 1;

将数据存储重置为第一个文件,并一次读取一个文件,直到没有数据剩下。将数据分配给数组dataarray

重置(fds);Hasdata (fds) dataarray{i} = read(fds);我=我+ 1;结尾

您可以创建一个数据存储来从不一定适合内存的大mat文件中读取数据。假设大的MAT-file中的每个数组都适合于可用内存,创建一个数据存储来读取和处理数据,分三个步骤:

  1. 编写一个自定义读取函数,每次从mat文件中读取一个数组。

  2. 设置数据存储函数的参数以执行部分读取。

  3. 每次从mat文件中读取一个数组。

编写自定义函数,从Mat文件时读取一个数组。该函数必须具有如下所述的签名@ReadFcn的观点filedatastore..将此文件保存在工作文件夹中或在MATLAB路径上的文件夹中。对于此示例,自定义函数load_variable包括在这里。

类型load_variable.m
函数[数据,变量,完成] = load_variable(文件名,变量)%如果变量列表为空,则在文件中从文件中创建变量列表,如果isempty(变量)变量=谁(' -  file',filename);终端%从变量列表中加载变量数据= load(filename,变量{1});%从列表变量中删除新读取的变量(1)= [];如果完成此文件,%将移动到下一个文件。完成= isempty(变量);结尾

创建和设置filedatastore.包含accidents.mat.指定要使用的数据存储区参数'partialfile'作为读取模式和load_variable作为自定义读取功能。

fds = fileDatastore (“accidents.mat”“ReadMode”'partialfile''readfcn', @load_variable);

使用数据存储从文件中读取前三个变量。该文件accidents.mat包含九个变量和每个呼叫返回一个变量。因此,要获得前三个变量,需要调用read函数三次。

data =阅读(fds)
data =结构体字段:数据源:{3 x1细胞}
data =阅读(fds)
data =结构体字段:hwycols: 17
data =阅读(fds)
data =结构体字段:hwydata (51 x17双):

请注意,示例文件accidents.mat是小的,适合内存,但您可以期待类似的结果,大的mat文件不适合内存。

提示

  • 用来子集洗牌功能上的filedatastore.对象,则必须设置“ReadMode”“文件”

在R2016A介绍