主要内容

内存不足数据的高数组

类支持的内存不足数据用于处理数据存储.数据存储使您能够在小块中处理大数据集,这些小块单独适合内存,而不是一次将整个数据集加载到内存中。Tall数组扩展了这一功能,使您能够使用通用函数处理内存不足的数据。

什么是高阵列?

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

高数组的好处

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

请注意

收集返回结果为内存中的MATLAB数组,适用于标准内存考虑因素。返回的结果可能会耗尽MATLAB的内存收集太大了。

制作高桌子

高表类似于内存中的MATLAB表,只是它们可以有任意数量的行。要从大型数据集创建高表,首先需要为数据创建一个数据存储。如果数据存储ds那么,包含表格数据高(ds)返回包含数据的高表或高时间表。看到数据存储有关创建数据存储的详细信息。

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

ds = tabularTextDatastore(“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 21 642 630 735 727“PS”1503“NA”53 57南8 12“宽松”SJC 308年南南“NA”0南南南南南26 1 1021 1020 1124 1987 1116 1550“NA”63“PS”56南8 296南南“SJC”“钻”0“NA”南南南南南1987年10 23 5 2055 2035 2218 2157“PS”1589“NA”83 82南21 20“圣”SMF 480年南南“NA”0南南南南南1987年10 23 5 1332 1320 14311418“PS”1655“NA”59 58南13 12“钻”SJC 296年南南“NA”0南南南南南22 629 1987 630 746 742“PS”1702“NA”77 72南4 373南南SMF的“宽松”0“NA”南南南南南1987 10 28 3 1446 1343 1547 1448“PS”1729“NA”61 65南59 63“宽松”SJC 308年南南“NA”0南南南南南1987 10 8 4 928 930 1052 1049“PS”1763“NA”84 79南3 2“圣”“旧金山”447年南南“NA”0南南南南南1987 10 10 6 859 900 1134 1123“PS”1800“NA”155 143南11 1“海”'LAX' 954 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

显示显示行数,,目前未知。MATLAB显示了一些行和垂直椭圆指示高表中有更多当前未显示的行。

制定高时间表

如果您正在处理的数据具有与每一行数据相关联的时间,则可以使用高时间表来处理这些数据。有关创建高时间表的信息,请参见扩展功能(时间表

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

HRS = (tt。DepTime- mod(tt.DepTime,100))/100; mins = mod(tt.DepTime,100); tt.Dates = datetime(tt.Year, tt.Month, tt.DayofMonth, hrs, mins, 0); tt(:,1:8) = []; TT = table2timetable(tt)
TT = 21 M×高时间表日期UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime通话时间ArrDelay DepDelay起源桌子距离TaxiIn TaxiOut取消CancellationCode转移CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay  ____________________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ ______________________________ 21 - 10月- 1987 06:42:00“PS”1503“NA”53 57南8 12“宽松”SJC 308年南南“NA”0南南南南南26 - 10月- 1987 10:21:00“PS”1550“NA”63 56南8 296南南“SJC”“钻”0“NA”南南南南南1987年- 10月23日20:55:00“PS”1589“NA”83 82南21 20“圣”SMF 480年南南“NA”0南南南南南1987年- 10月23日13:32:00“PS”1655“NA”59 58南十三12“钻”SJC 296年南南“NA”0南南南南南22 - 10月- 1987 06:29:00“PS”1702“NA”77 72南4 1 SMF的“宽松”373年南南“NA”0南南南南南1987年- 10月28日14:46:00“PS”1729“NA”61 65南59 63“宽松”SJC 308年南南“NA”0南南南南南08 - 10月- 1987年09:28:00“PS”1763“NA”84 79南3 2“圣”“旧金山”447年南南“NA”0南南南南南10 - 10月- 1987年08:59:00“PS”1800“NA”155 143南11 1“海”“宽松”954南南0 0南南南南南“NA”  : : : : : : : : : : : : : : : : : : : : : : : :

创建高数组

从高表或高时间表中提取变量时,结果是适当的底层数据类型的高数组。高数组可以是数字、逻辑、日期时间、持续时间、日历持续时间、类别、字符串或单元格数组。此外,您还可以转换内存中的数组一个变成一个高大的阵列高(A).内存数组一个必须具有受支持的数据类型之一。金宝app

提取到达延迟ArrDelay从高大的时间表TT.这将创建一个新的高数组变量,其底层数据类型为double。

a = TT。一个rrDelay
a = M×1高双列向量8 8 21 13 4 59 3 11::

classUnderlying而且isaUnderlying函数用于确定高数组的底层数据类型。

延迟评价

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

当您使用高数组时,MATLAB会跟踪所有要执行的操作。类请求输出时,将使用此信息优化数据的遍历次数收集函数。因此,使用未求值的tall数组并仅在需要时请求输出是正常的。有关更多信息,请参见高数组的延迟计算

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

M = mean(a,“omitnan”
M =高双份?预览延期。学习更多的知识。
S = std(a,“omitnan”
S =高?预览延期。学习更多的知识。
One_sigma_bounds = [m-s m m+s]
one_sigma_bounds = M×N×…高阵???...???...? ? ? ... : : : : : : Preview deferred. Learn more.

评估与收集

延迟计算的好处是,当MATLAB执行计算时,通常可以将运算组合在一起,从而使数据的通过次数最小化。所以即使你执行了很多运算,MATLAB也只在绝对必要的时候对数据进行额外的遍历。

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

收集在MATLAB中返回整个结果,你应该确保结果适合内存。

使用收集计算one_sigma_bounds并把结果存到内存中。在这种情况下,one_sigma_bounds需要进行多次运算才能计算,但MATLAB将这些运算合并为一次数据处理。由于本例中的数据很小,收集快速执行。但是,随着数据大小的增加,消除遍历数据变得更有价值。

Sig1 = gather(one_sigma_bounds)
使用本地MATLAB会话计算tall表达式:-通过1 / 1:在1.5秒内完成计算在1.8秒内完成sig1 = -23.4572 7.1201 37.6975

可以指定多个输入和输出收集如果您想一次计算多个tall数组。这种技术比调用更快收集很多次了。例如,计算最小和最大到达延迟。单独计算,每个值都需要遍历数据,以计算总共两次遍历。然而,同时计算这两个值只需要对数据进行一次遍历。

[max_delay, min_delay] = collect (max(a),min(a))
使用本地MATLAB会话计算tall表达式:-通过1 / 1:在1.1秒内完成计算在1.1秒内完成max_delay = 1014 min_delay = -64

这些结果表明,大多数航班平均晚点7分钟左右。但对于航班延误37分钟或提前23分钟来说,误差在一个标准偏差范围内。数据集中最快的航班提前了大约一个小时到达,最近的航班延误了好几个小时。

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

保存函数保存状态,但不复制任何数据。由此产生的.mat文件通常很小。但是,原始数据文件必须在相同的位置可用,以便后续使用负载

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

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

如果你有一个高数组助教,然后将其写入文件夹位置使用命令:

写(位置,TA);

后来,为了重建助教从写入的文件中,使用以下命令:

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

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

金宝app支持功能

大多数核心函数使用高数组的方式与使用内存中数组的方式相同。然而,在某些情况下,函数处理高数组的方式是特殊的或有限制的。类中的函数的参考页底部,可以判断函数是否支持高数组,以及它是否有金宝app任何限制扩展功能节(有关示例,请参见filloutliers).

有关支持高数组的所有MATLAB函数的过滤列表,请参见金宝app函数列表(高数组)

一些工具箱也支持Tall数组,使您能够编写金宝app机器学习算法、部署独立应用程序以及并行或在集群上运行计算。有关更多信息,请参见用其他产品扩展Tall数组下载188bet金宝搏

另请参阅

||||

相关的话题