arrayDatastore
说明
使用 ArrayDatastore
对象管理基于内存中数据创建的数据存储。您可以使用 arrayDatastore
函数创建 ArrayDatastore
对象,指定其属性,然后使用对象函数导入和处理数据。
创建对象
描述
输入参量
A
— 输入数组
矩阵
输入数组,指定为矩阵。
属性
ArrayDatastore
属性描述数据存储对象中内存数据的格式,并控制如何从数据存储中读取数据。创建数据存储对象时,可以使用名称-值对组参量指定 ArrayDatastore
属性的值。要在创建对象后查看或修改属性,请使用圆点表示法。
ReadSize
— 要读取的数据量
1
(默认) | 正整数
在调用 read
函数时要读取的数据量,指定为由 'ReadSize'
和正整数组成的以逗号分隔的对组。每次调用 read
最多读取 ReadSize
行。如果为 'ReadSize'
指定的值超过输入数据的行数,则 read
将读取数据存储对象中的所有行。
'ReadSize'
的默认值是 1
。
数据类型: double
IterationDimension
— 要在其中读取数据的维度
1
(默认) | 正整数
在调用 read
函数时要在其中读取数据的维度,指定为由 'IterationDimension'
和正整数组成的以逗号分隔的对组。例如,'IterationDimension',2
使 read
从数据存储对象返回列向数据。'IterationDimension'
的默认值为 1
,这使得 read
返回行向数据。
如果将 'OutputType'
属性的值指定为 'same'
,则 'IterationDimension'
必须设置为值 1。
如果在创建 ArrayDatastore
对象后修改 'IterationDimension'
的值,则 MATLAB® 会将数据存储重置为未读状态。
数据类型: double
OutputType
— 输出数据类型
'cell'
(默认) | 'same'
输出数据类型,指定为以逗号分隔的对组,该对组由 'OutputType'
和下列值之一组成:
'cell'
- 以 n×1 元胞数组形式返回数据。例如,如果A
是数值数组,ReadSize
是3
,则read
返回由数值数据组成的 3×1 元胞数组。'same'
- 返回与输入数组A
相同的数据类型。例如,如果A
是数值数组,则read
返回数值数组。
OutputType
的值决定 preview
、read
和 readall
函数返回的数据类型。
如果在创建 ArrayDatastore
对象后修改 'OutputType'
的值,则 MATLAB 会将数据存储重置为未读状态。
数据类型: char
| string
对象函数
示例
创建 ArrayDatastore 对象
从矩阵中创建一个 ArrayDatastore
对象,然后读取数据存储中的所有数据。
创建一个矩阵。
A = magic(10)
A = 10×10
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
从矩阵中创建一个 ArrayDatastore
对象。
arrds = arrayDatastore(A)
arrds = ArrayDatastore with properties: ReadSize: 1 IterationDimension: 1 OutputType: "cell"
读取数据存储中的所有数据。
readall(arrds)
ans=10×1 cell array
{[ 92 99 1 8 15 67 74 51 58 40]}
{[ 98 80 7 14 16 73 55 57 64 41]}
{[ 4 81 88 20 22 54 56 63 70 47]}
{[ 85 87 19 21 3 60 62 69 71 28]}
{[ 86 93 25 2 9 61 68 75 52 34]}
{[ 17 24 76 83 90 42 49 26 33 65]}
{[ 23 5 82 89 91 48 30 32 39 66]}
{[ 79 6 13 95 97 29 31 38 45 72]}
{[ 10 12 94 96 78 35 37 44 46 53]}
{[11 18 100 77 84 36 43 50 27 59]}
返回与输入数组相同的数据类型
返回与输入数组相同的数据类型,而不是以 n×1 元胞数组形式返回数据。
基于电子表格文件 counties.xlsx
创建一个表。导入该电子表格中第五列到第十列的所有行。
T = readtable("counties.xlsx","Range",[1,5,67,10])
T=66×6 table
CountyName State StateName Population2010 HousingUnits2010 LandArea
_______________________ ______ _______________ ______________ ________________ __________
{'Fairfield County' } {'CT'} {'Connecticut'} 9.1683e+05 3.6122e+05 1.6185e+09
{'Hartford County' } {'CT'} {'Connecticut'} 8.9401e+05 3.7425e+05 1.9039e+09
{'Litchfield County' } {'CT'} {'Connecticut'} 1.8993e+05 87550 2.3842e+09
{'Middlesex County' } {'CT'} {'Connecticut'} 1.6568e+05 74837 9.5649e+08
{'New Haven County' } {'CT'} {'Connecticut'} 8.6248e+05 3.62e+05 1.5657e+09
{'New London County' } {'CT'} {'Connecticut'} 2.7406e+05 1.2099e+05 1.722e+09
{'Tolland County' } {'CT'} {'Connecticut'} 1.5269e+05 57963 1.0624e+09
{'Windham County' } {'CT'} {'Connecticut'} 1.1843e+05 49073 1.3284e+09
{'Androscoggin County'} {'ME'} {'Maine' } 1.077e+05 49090 1.2119e+09
{'Aroostook County' } {'ME'} {'Maine' } 71870 39529 1.7279e+10
{'Cumberland County' } {'ME'} {'Maine' } 2.8167e+05 1.3866e+05 2.1633e+09
{'Franklin County' } {'ME'} {'Maine' } 30768 21709 4.3942e+09
{'Hancock County' } {'ME'} {'Maine' } 54418 40184 4.11e+09
{'Kennebec County' } {'ME'} {'Maine' } 1.2215e+05 60972 2.2469e+09
{'Knox County' } {'ME'} {'Maine' } 39736 23744 9.4569e+08
{'Lincoln County' } {'ME'} {'Maine' } 34457 23493 1.1806e+09
⋮
基于该表创建一个数据存储。将 'OutputType'
设置为 'same'
,以返回与输入表相同的数据类型。
arrds = arrayDatastore(T,"OutputType","same")
arrds = ArrayDatastore with properties: ReadSize: 1 IterationDimension: 1 OutputType: "same"
预览数据存储中的数据。
preview(arrds)
ans=8×6 table
CountyName State StateName Population2010 HousingUnits2010 LandArea
_____________________ ______ _______________ ______________ ________________ __________
{'Fairfield County' } {'CT'} {'Connecticut'} 9.1683e+05 3.6122e+05 1.6185e+09
{'Hartford County' } {'CT'} {'Connecticut'} 8.9401e+05 3.7425e+05 1.9039e+09
{'Litchfield County'} {'CT'} {'Connecticut'} 1.8993e+05 87550 2.3842e+09
{'Middlesex County' } {'CT'} {'Connecticut'} 1.6568e+05 74837 9.5649e+08
{'New Haven County' } {'CT'} {'Connecticut'} 8.6248e+05 3.62e+05 1.5657e+09
{'New London County'} {'CT'} {'Connecticut'} 2.7406e+05 1.2099e+05 1.722e+09
{'Tolland County' } {'CT'} {'Connecticut'} 1.5269e+05 57963 1.0624e+09
{'Windham County' } {'CT'} {'Connecticut'} 1.1843e+05 49073 1.3284e+09
指定 ArrayDatastore 的读取大小
为 MAT 文件变量创建一个数据存储,然后从包含不同 ReadSize
值的文件中读取数据。
将 MAT 文件 BostonWeatherData.mat
加载到工作区中。
load 'BostonWeatherData.mat'
为 weatherData
变量创建一个数据存储。将 ReadSize
设置为 10
行。ReadSize
的值决定每次调用 read
函数时从数据存储中读取多少行数据。将 'OutputType'
设置为 'same'
,以返回与输入数组相同的数据类型。
arrds = arrayDatastore(weatherData,"ReadSize",10, "OutputType","same")
arrds = ArrayDatastore with properties: ReadSize: 10 IterationDimension: 1 OutputType: "same"
从数据存储读取数据。
data1 = read(arrds)
data1=10×3 timetable
Time TemperatureF Humidity Events
___________ ____________ ________ ____________
01-Jul-2015 72 78 Thunderstorm
02-Jul-2015 72 60 None
03-Jul-2015 70 56 None
04-Jul-2015 67 75 None
05-Jul-2015 72 67 None
06-Jul-2015 74 69 None
07-Jul-2015 75 77 Rain
08-Jul-2015 79 68 Rain
09-Jul-2015 66 77 Rain
10-Jul-2015 69 74 Rain
将 ReadSize
属性值设置为 30
,并从数据存储中读取。第二次调用 read
函数将从数据存储中读取接下来的 30 行。
arrds.ReadSize = 30;
从数据存储读取数据。
data2 = read(arrds)
data2=30×3 timetable
Time TemperatureF Humidity Events
___________ ____________ ________ ______
11-Jul-2015 76 49 None
12-Jul-2015 81 54 None
13-Jul-2015 72 81 None
14-Jul-2015 74 72 Rain
15-Jul-2015 75 87 Rain
16-Jul-2015 64 65 None
17-Jul-2015 68 72 None
18-Jul-2015 71 81 Rain
19-Jul-2015 81 73 Rain
20-Jul-2015 81 62 None
21-Jul-2015 76 66 None
22-Jul-2015 77 58 None
23-Jul-2015 75 52 None
24-Jul-2015 74 60 Rain
25-Jul-2015 66 81 None
26-Jul-2015 71 79 Rain
⋮
指定迭代维度
您可以选择要在其中读取 ArrayDatastore
中的数据的维度。例如,您可以通过沿第四个维度读取来读取其数据存储在 ArrayDatastore
中的视频帧。
加载视频数据。基于文件 xylophone.mp4
创建一个 VideoReader
对象。
v = VideoReader('xylophone.mp4');
将 VideoReader
对象中的所有视频帧读入工作区中。
allFrames = read(v);
基于您读取的帧创建一个数据存储。将 'IterationDimension'
设置为 4
以沿第四个维度读取数据。将 'OutputType'
设置为 'cell'
以元胞数组形式返回数据。将 'ReadSize'
设置为 4 以便在每次调用 read
函数时读取四个视频帧。
arrds = arrayDatastore(allFrames,"IterationDimension",4,"OutputType","cell","ReadSize",4)
arrds = ArrayDatastore with properties: ReadSize: 4 IterationDimension: 4 OutputType: "cell"
读取数据存储中的前四个视频帧,并将其显示为矩形分块图像。
frames = read(arrds); imout = imtile(frames); imshow(imout)
提示
版本历史记录
在 R2020b 中推出
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)