文档

高大的数组

高数组用于处理由a备份的内存不足数据数据存储。数据存储使您能够以小块的方式处理大数据集,这些小块能够分别装入内存,而不是一次将整个数据集加载到内存中。Tall数组扩展了此功能,使您能够使用常用函数处理内存不足的数据。

什么是高数组?

由于数据不是一次全部加载到内存中,因此高数组在第一维中可以是任意大的(也就是说,它们可以有任意数量的行)。不需要编写特殊的代码来考虑数据的巨大大小(比如使用MapReduce等技术),高数组可以让您以一种直观的方式处理大型数据集,类似于使用内存中的MATLAB®数组。许多核心操作符和函数对于高数组的工作方式与内存中的数组是一样的。MATLAB一次处理小块的数据,处理所有的数据分块和处理在后台,使通用表达式,如A + B,使用大数据集。

高阵列的好处

与内存中的数组不同,高数组通常不会计算,直到您请求使用收集函数。这延迟评价允许您快速处理大型数据集。当您最终请求输出时使用收集, MATLAB在可能的情况下结合了排队计算,并获得通过数据的最小次数。通过数据的次数会极大地影响执行时间,因此建议只在必要时请求输出。

请注意

收集返回结果作为内存MATLAB阵列,标准存储器的考虑也适用。MATLAB可能会遇到内存不足,如果返回结果通过收集太大。

创建高表

高的表就像内存中的MATLAB表,除了它们可以有任意数量的行。要从一个大数据集创建一个高的表,首先需要创建一个数据存储的数据。如果数据存储ds包含表格数据高(ds)返回一个包含该数据的高表。看到数据存储有关创建数据存储的详细信息。

创建指向航空公司航班数据的表格文件的电子表格数据存储。对于包含文件集合的文件夹,可以指定整个文件夹位置,或使用通配符,‘* . csv‘,以便在数据存储中包含具有相同文件扩展名的多个文件。通过处理清洁数据“NA”值作为缺失的数据,以便数据存储取代他们值。另外,将几个文本变量的格式设置为% s数据存储将它们读取为字符向量的单元格数组。

ds =数据存储(“airlinesmall.csv”);ds.TreatAsMissing =“NA”;ds.SelectedFormats {strcmp (ds.SelectedVariableNames,“TailNum”)} =' % s ';ds.SelectedFormats {strcmp (ds.SelectedVariableNames,'CancellationCode')} =' % s ';

从数据存储中创建一个高的表。当您在这个高表上执行计算时,底层数据存储将读取数据块并将它们传递给高表进行处理。数据存储和高表都不保留任何底层数据。

tt =高(ds)
TT = M×29高的表年月DAYOFMONTH DAYOFWEEK DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime开播ArrDelay DepDelay产地目标距离TaxiIn TaxiOut取消CancellationCode改行CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay ____ _____ __________ _________ _______ __________ _______ __________ _____________ _________ _______ _________________ ______________ _______________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________ 1987 10 21 3 642 630 735 727 'PS' 1503 'NA' 53 57的NaN 8 12 'LAX' 'SJC' 308楠楠0 'NA' 0为NaN楠楠楠楠1987 10 26 1 1021 1020 1124 1116 'PS' 1550 'NA' 63 56 NaN的8 1 'SJC' 'BUR' 296楠楠0 'NA' 0楠楠楠楠的NaN 1987 10 23 5 2055 2035 22182157 'PS' 1589 'NA' 83 82 21的NaN 20 'SAN' 'SMF' 480楠楠0 'NA' 0楠楠楠楠的NaN 1987 10 23 5 1332 1320 1431 1418'PS” 1655 'NA' 59 58的NaN 13 12 'BUR' 'SJC' 296楠楠0 'NA' 0楠楠楠楠的NaN 1987 10 22 4 629 630 746 742 'PS' 1702 'NA' 77 72 NaN的4  -1 'SMF' 'LAX' 373楠楠0 'NA' 0楠楠楠楠的NaN 1987 10 28 3 1446 1343 1547 1448 'PS' 1729 'NA' 61 65的NaN 59 63 'LAX' 'SJC' 308楠楠0'NA' 0楠楠楠楠的NaN 1987 10 8 4 928 930 1052 1049 'PS' 1763 'NA' 84 79 NaN 3的-2 'SAN' 'SFO' 447楠楠0 'NA' 0楠楠楠楠的NaN 198710 10 6 859 900 1134 1123 'PS' 1800 'NA' 155 143的NaN 11 -1 'SEA' 'LAX' 954楠楠0 'NA' 0楠楠楠楠楠::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

显示的行数,目前尚不清楚。MATLAB显示一些行和垂直椭圆:指示高表中有更多当前未显示的行。

创造高的时间表

如果您正在使用的数据与每一行数据有关联的时间,那么您可以将高表转换为高时间表。有几种方法可以创建一个高时间表:

在这种情况下,就是高桌tt与每一行关联的时间,但是它们被分解为几个表变量,例如一年,,DayofMonth, 等等。结合所有这些作品的日期时间信息到一个单一的新高日期时间变量日期,根据出发时间计算DepTime。使用。创建一个高时间表日期作为行乘以。自日期表中唯一的日期时间变量是table2timetable函数自动将其用于行时间。

小时=(tt.DepTime  -  MOD(tt.DepTime,100))/ 100;分钟= MOD(tt.DepTime,100);tt.Dates =日期时间(tt.Year,tt.Month,tt.DayofMonth,小时,分钟,0);TT(:,1:8)= [];TT = table2timetable(TT)
TT = M×21个高大时间表日期UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime通话时间ArrDelay DepDelay产地目标距离TaxiIn TaxiOut取消CancellationCode改行CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay ____________________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ ______________________________ 21-OCT-1987 6点42分00秒 'PS' 1503 'NA' 53 57 8的NaN 12 'LAX' 'SJC' 308楠楠0 'NA' 0楠楠楠楠NaN的26-OCT-1987 10点21分:00 'PS' 1550 'NA' 63 56 8的NaN 1 'SJC' 'BUR' 296楠楠0 'NA' 0楠楠楠楠NaN的23-OCT-1987 20点55分00秒 'PS' 1589 'NA'83 82 21的NaN 20 'SAN' 'SMF' 480楠楠0 'NA' 0楠楠楠楠NaN的23-OCT-1987 13时32分00秒 'PS' 1655 'NA' 59 58 13的NaN 12 'BUR''SJC” 296楠楠0 'NA' 0楠楠楠楠NaN的22-OCT-1987 6点29分○○秒 'PS' 1702 'NA' 77 72的NaN 4 -1 'SMF' 'LAX' 373的NaN为NaN 0 'NA' 0楠楠楠楠NaN的28-OCT-1987 14点46分00秒 'PS' 1729 'NA' 61 65 59的NaN 63 'LAX' 'SJC' 308楠楠0 'NA' 0为NaN楠楠楠楠08-OCT-1987九点28分00秒 'PS' 1763 'NA' 84 79 NaN 3的-2 'SAN' 'SFO' 447楠楠0 'NA' 0楠楠楠楠NaN的10-OCT-1987 08:59:00 'PS' 1800 'NA' 155 143的NaN 11 -1 'SEA' 'LAX' 954楠楠0 'NA' 0楠楠楠楠楠::::::::::::::::::::::::

创造高的数组

当您提取从一个高大的表或高大时间表的变量,其结果是适当的基础数据类型的一个高大的阵列。一个高大的阵列可以是数字的,逻辑的,日期时间,持续时间,日历时间,分类,字符串或单元阵列。此外,您还可以将内存中的数组一个到一个高数组tA =高(A)。内存中的数组一个必须是受支持的数据类型之一。万博1manbetx

提取到达延迟ArrDelay从长远来看TT。这将创建一个底层数据类型为double的新的tall数组变量。

A = TT.ArrDelay
高双列向量8 8 21 13 4 59 3 11::

classUnderlyingisaUnderlying函数用于确定tall数组的底层数据类型。

延迟评价

高数组的一个重要方面是,当您使用它们时,大多数操作不会立即执行。这些操作似乎执行得很快,因为实际的计算会被延迟,直到您特别请求执行计算。属性触发对高数组的求值收集函数(将结果存入内存)或函数(将结果写入磁盘)。这种延迟计算很重要,因为即使是像这样的简单命令大小(X)在一个包含10亿行的高数组上执行不是一个快速的计算。

当你与高大阵列工作,MATLAB跟踪所有的操作来进行的。然后,该信息被用于通过将被要求的数据时,请求输出与优化遍数收集函数。因此,使用未计算的高数组并仅在需要时请求输出是正常的。有关更多信息,请参见延迟计算高数组

计算到达延迟的平均值和标准偏差。使用这些值来构建与平均值的一个标准偏差内的延迟的上限和下限阈值。请注意,每个操作的结果表明尚未计算数组。

m =意味着(,“omitnan”)
高双?
s =性病(,“omitnan”)
S =高大数组?
one_sigma_bounds = [m-s m- m+s]
one_sigma_bounds = M×N×……高大的数组?吗?吗?…吗?吗?吗?…吗? ? ? ... : : : : : :

评估与收集

延迟计算的好处是,当MATLAB执行计算的时间到来时,通常可以组合操作,使通过数据的次数最小化。因此,即使你执行了很多操作,MATLAB也只是在绝对必要时对数据进行额外的遍历。

收集函数强制计算所有排队操作,并将结果输出到内存中。出于这个原因,你可以想到收集作为高数组和内存数组之间的桥梁。例如,你无法控制如果循环使用一个高大的逻辑数组,但一旦数组被计算收集它成为一个内存中的逻辑数组,您可以在这些上下文中使用它。

收集返回整个结果在MATLAB中,您应该确保结果能够装入内存。

使用收集计算one_sigma_bounds并将结果带入记忆。在这种情况下,one_sigma_bounds需要几个操作来计算,但MATLAB将这些操作组合成一个数据传递。由于这个例子中的数据很小,收集快速执行。但是,随着数据大小的增加,消除数据传递变得更有价值。

sig1 =收集(one_sigma_bounds)
使用本地MATLAB会话计算高表达式:-通过1中的1:在1秒内完成计算在1秒内完成sig1 = -23.4572 7.1201 37.6975

可以指定多个输入和输出收集如果你想一次计算几个高数组。这项技术比呼叫要快收集很多次了。例如,计算最小和最大到达延迟。分别计算,每个值都需要通过数据来计算总共两次遍历。但是,同时计算这两个值只需要一次数据传递。

[max_delay, min_delay] = gather(max(a),min(a))
评估使用本地MATLAB会话高表达: - 通的1 1:在1秒完成评价在1秒完成max_delay = 1014 min_delay = -64

这些结果表明,平均而言,大多数航班晚到约7分钟。但对于航班来说,迟到37分钟或早到23分钟都在一个标准差之内。数据集中最快的航班早到了大约一个小时,最近的航班又延误了好几个小时。

保存、加载和检查点高数组

保存函数保存状态一个高大的阵列,但不复制的任何数据。所结果的.mat文件通常很小。但是,原始数据文件必须在相同的位置可用,以便随后使用负载

函数复制数据并将副本保存为二进制文件的集合,这会消耗大量磁盘空间。在写入之前执行tall数组上的所有挂起操作来计算值。一次复制数据,它独立于原始数据。因此,即使原始数据不再可用,也可以从写入的文件重新创建tall数组。

通过创建指向写入文件位置的新数据存储,可以从写入的二进制文件重新创建tall数组。此功能使您能够创建检查点快照高阵列数据。创建检查点是保存数据预处理结果的好方法,这样数据就可以以更有效的方式加载。

如果你有一个很高的数组助教,那么你可以将它写入该文件夹位置使用命令:

写(位置,TA);

后来,重建助教从书面文件,使用命令:

ds =数据存储(位置);TA =高(ds);

此外,您可以使用函数来触发对高数组的求值并将结果写入磁盘。这个用的类似于收集然而,不会将任何结果带入内存。

工具箱功能

多个工具箱支持高数组,使您能够完万博1manbetx成诸如编写机器学习算法、部署独立应用程序以及并行或在集群上运行计算等任务。有关更多信息,请参见延伸高阵与其他产品s manbetx 845

另请参阅

||||

相关的话题

是这个主题有帮助吗?