tall
创建 tall 数组
说明
示例
创建 tall 数组
将数据存储转换为 tall 数组。
首先,为数据集创建数据存储。您可以使用 datastore(location)
指定数据集的完整或相对文件位置来创建数据存储。location
参数可以指定:
单个文件,例如
'airlinesmall.csv'
多个具有相同扩展名的文件,例如
'*.csv'
整个文件夹的文件,例如
'C:\MyData'
创建数据存储时,tabularTextDatastore
还会提供几个选项用于指定文件和文本格式属性。
为 airlinesmall.csv
数据集创建数据存储。将 'NA'
值视为缺失数据,以使它们被替换为 NaN
值。选择要使用的变量的小型子集。
varnames = {'ArrDelay', 'DepDelay', 'Origin', 'Dest'}; ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ... 'SelectedVariableNames', varnames);
使用 tall
为数据存储中的数据创建一个 tall 数组。由于 ds
中的数据是表格数据,因此结果是一个 tall 表。如果数据不是表格数据,则 tall
将改为创建一个 tall 元胞数组。
T = tall(ds)
T = Mx4 tall table ArrDelay DepDelay Origin Dest ________ ________ _______ _______ 8 12 {'LAX'} {'SJC'} 8 1 {'SJC'} {'BUR'} 21 20 {'SAN'} {'SMF'} 13 12 {'BUR'} {'SJC'} 4 -1 {'SMF'} {'LAX'} 59 63 {'LAX'} {'SJC'} 3 -2 {'SAN'} {'SFO'} 11 -1 {'SEA'} {'LAX'} : : : : : : : :
您可以使用多个常用的 MATLAB® 运算符和函数来处理 tall 数组。要查看函数是否适用于 tall 数组,请查看函数参考页底部的扩展功能部分。
计算 tall 数组的大小
将数据存储转换为 tall 表,使用延迟计算来计算其大小,然后执行计算并在内存中返回结果。
首先,为 airlinesmall.csv
数据集创建数据存储。将 'NA'
值视为缺失数据,以使它们被替换为 NaN
值。设置几个列的文本格式,以便将它们作为字符向量元胞数组读取。将数据存储转换为 tall 表。
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA'); ds.SelectedFormats{strcmp(ds.SelectedVariableNames, 'TailNum')} = '%s'; ds.SelectedFormats{strcmp(ds.SelectedVariableNames, 'CancellationCode')} = '%s';
T = tall(ds)
T = Mx29 tall table Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay ____ _____ __________ _________ _______ __________ _______ __________ _____________ _________ _______ _________________ ______________ _______ ________ ________ _______ _______ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________ 1987 10 21 3 642 630 735 727 {'PS'} 1503 {'NA'} 53 57 NaN 8 12 {'LAX'} {'SJC'} 308 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 26 1 1021 1020 1124 1116 {'PS'} 1550 {'NA'} 63 56 NaN 8 1 {'SJC'} {'BUR'} 296 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 23 5 2055 2035 2218 2157 {'PS'} 1589 {'NA'} 83 82 NaN 21 20 {'SAN'} {'SMF'} 480 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 23 5 1332 1320 1431 1418 {'PS'} 1655 {'NA'} 59 58 NaN 13 12 {'BUR'} {'SJC'} 296 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 22 4 629 630 746 742 {'PS'} 1702 {'NA'} 77 72 NaN 4 -1 {'SMF'} {'LAX'} 373 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 28 3 1446 1343 1547 1448 {'PS'} 1729 {'NA'} 61 65 NaN 59 63 {'LAX'} {'SJC'} 308 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 8 4 928 930 1052 1049 {'PS'} 1763 {'NA'} 84 79 NaN 3 -2 {'SAN'} {'SFO'} 447 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN 1987 10 10 6 859 900 1134 1123 {'PS'} 1800 {'NA'} 155 143 NaN 11 -1 {'SEA'} {'LAX'} 954 NaN NaN 0 {'NA'} 0 NaN NaN NaN NaN NaN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
tall 表的显示内容指示 MATLAB® 尚不了解表中有多少行数据。
计算 tall 表的大小。由于计算 tall 数组的大小需要完全遍历数据,因此 MATLAB 不会立即计算该值。而是与 tall 数组的大多数运算一样,结果是一个未计算的 tall 数组,其值和大小目前是未知的。
s = size(T)
s = 1x2 tall double row vector ? ?
使用 gather
函数可执行延迟计算并在内存中返回结果。size
返回的结果是一个非常小的 1×2 向量,适合放在内存中。
sz = gather(s)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.5 sec Evaluation completed in 1.8 sec
sz = 1×2
123523 29
如果对未约简的 tall 数组使用 gather
,则结果可能不适合放在内存中。如果您不确定 gather
返回的结果是否适合放在内存中,请使用 gather(head(X))
或 gather(tail(X))
只将一小部分计算结果放入内存中。
将内存数组转换为 tall 数组
创建一个由随机数组成的内存数组,然后将其转换为 tall 数组。以这种方式从内存数组创建 tall 数组对于新程序的调试或原型构建非常有用。内存数组仍然受正常内存限制的约束,即使在它转换为 tall 数组后,也不能增大到超出内存的限制。
A = rand(100,4); tA = tall(A)
tA = 100x4 tall double matrix 0.8147 0.1622 0.6443 0.0596 0.9058 0.7943 0.3786 0.6820 0.1270 0.3112 0.8116 0.0424 0.9134 0.5285 0.5328 0.0714 0.6324 0.1656 0.3507 0.5216 0.0975 0.6020 0.9390 0.0967 0.2785 0.2630 0.8759 0.8181 0.5469 0.6541 0.5502 0.8175 : : : : : : : :
在 R2019b 及更高版本中,当您将内存数组转换为 tall 数组时,可以对数组执行计算,而不需要额外的内存来存储数据的临时副本。例如,以下代码对大型矩阵中的数据归一化,然后计算所有行和列的总和。该计算的内存版本不仅需要存储数组,还需要有足够的可用内存来创建数组的临时副本。
N = 5000; tA = tall(rand(N)); tB = tA - mean(tA); S = gather(sum(tB, [1,2]))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 0.27 sec - Pass 2 of 2: Completed in 0.46 sec Evaluation completed in 1.2 sec
S = -1.0004e-11
如果调整 N
的值,使得有足够的内存来存储 tA
但没有足够的内存来存储其副本,计算仍会成功执行。
输入参数
ds
— 输入数据存储
数据存储对象
输入数据存储,指定为数据存储对象。有关为数据集创建数据存储对象的详细信息,请参阅数据存储。
tall 数组仅适用于确定性数据存储。也就是说,如果对数据存储使用 read
,继而使用 reset
重置数据存储,然后再次读取数据存储,则这两种读取方式返回的数据必须相同。涉及不确定的数据存储的 tall 数组计算会产生不可预测的结果。有关详细信息,请参阅Select Datastore for File Format or Application。
示例: ds = tabularTextDatastore('airlinesmall.csv')
指定单个文件。
示例: ds = tabularTextDatastore('*.csv')
指定 .csv
文件的集合。
示例: ds = spreadsheetDatastore('C:\MyData')
指定电子表格文件的文件夹。
示例: ds = datastore('hdfs:///data/')
指定 HDFS 文件系统中的数据集。
A
— 内存变量
数组
内存变量,指定为数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| table
| timetable
| string
| cell
| categorical
| datetime
| duration
| calendarDuration
复数支持: 是
输出参数
t
— tall 数组
数组
tall 数组,返回为下列类型之一:
转换数据存储时,
t
是表格数据存储的 tall 表或 tall 时间表。否则,t
是一个 tall 元胞数组。转换内存数组时,
t
的基本数据类型与class(A)
相同。
有关如何高效使用 tall 数组的信息,请参阅 Deferred Evaluation of Tall Arrays。
提示
请参阅Extend Tall Arrays with Other Products,了解有关如何将 tall 数组与以下产品一起使用的信息:
Statistics and Machine Learning Toolbox™
Parallel Computing Toolbox™
MATLAB Parallel Server™
Database Toolbox™
MATLAB Compiler™
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
自动并行支持
通过使用 Parallel Computing Toolbox™ 自动运行并行计算来加快代码执行。
如果安装了 Parallel Computing Toolbox,则在使用 tall
时,MATLAB 会自动在本地计算机上打开并行工作进程池。MATLAB 在可用的多个工作进程上运行计算。使用并行预设项控制并行行为,包括扩展到集群。
有关详细信息,请参阅 Use Tall Arrays on a Parallel Pool (Parallel Computing Toolbox)。
版本历史记录
在 R2016b 中推出
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)