主要内容

用于内存不足数据的高数组

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

什么是高数组?

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

高排列的好处

与内存中的数组不同,高数组通常不会计算,直到您请求使用收集函数。这延迟评价允许您快速处理大数据集。当您最终请求输出使用收集, 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 tall table Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime uniqucarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode altered 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 1431 1418“PS”1655“NA”59 58南13 12“钻”“SJC”296南南0 0南南南南南1987“NA”10 22 4 629 630 746 742“PS”1702“NA”77 72南4 373南南SMF的“宽松”0“NA”南南南南南1987 10 28 1448 PS 1729 1446 1343 1547 61 65南59 63“NA”“宽松”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 954南南“海”“宽松”0“NA”南南南南南  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

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

创造高的时间表

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

这里指的是高桌子tt与每一行关联的times,但它们被分解为几个表变量,如一年DayofMonth,等等。将所有这些datetime信息合并到一个新的tall datetime变量中日期,这是根据出发时间计算的DepTime.然后,用日期作为行乘以。自日期表中唯一的datetime变量是table2timetable函数自动将其用于行次数。

小时= (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 = M×21 tall schedule Dates UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode altered CarrierDelay 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”0 NaN NaN NaN NaN NaN 23-Oct-1987 20:55:00 'PS' 1589 'NA' 83 82 NaN 21 20 'SAN' 'SMF' 480 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 23-Oct-1987 13:32:00 'PS' 1655 'NA' 59 58 NaN 13 12 'BUR' 'SJC' 296 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 22-Oct-1987 06:29:00 'PS' 1702 'NA' 77 72 NaN 4 -1 'SMF' 'LAX' 373 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 28-Oct-1987 14:46:00 'PS' 1729 'NA' 61 65 NaN 59 63 'LAX' 'SJC' 308 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 08-Oct-1987 09:28:00 'PS' 1763 'NA' 84 79 NaN 3 -2 'SAN' 'SFO' 447 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN 10-Oct-1987 08:59:00 'PS' 1800 'NA' 155 143 NaN 11 -1 'SEA' 'LAX' 954 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN : : : : : : : : : : : : : : : : : : : : : : : :

创造高的数组

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

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

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

classUnderlyingisaUnderlying函数对于确定高数组的基础数据类型很有用。

延迟评价

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

当你使用高数组时,MATLAB会跟踪所有要执行的操作。属性请求输出时,将使用该信息优化数据的传递次数收集函数。因此,通常只在需要时使用未计算的高数组和请求输出。有关更多信息,请参见高数组的递延求值

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

m =意味着(,“omitnan”
M =高双?预览延期。学习更多的知识。
s =性病(,“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 =收集(one_sigma_bounds)
在1.8秒内完成的评估sig1 = -23.4572 7.1201 37.6975

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

[max_delay, min_delay] = gather(max(a),min(a))
在1.1秒内完成的评估max_delay = 1014 min_delay = -64

这些结果表明,大多数航班平均晚点7分钟左右。但一架航班迟到至多37分钟或提前至多23分钟,都在一个标准偏差之内。数据库里最快的航班提前了大约一个小时到达,而最近的航班延误了好几个小时。

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

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

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

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

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

写(位置,TA);

后来,重建助教从已写的文件,使用命令:

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

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

金宝app支持功能

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

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

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

另请参阅

||||

相关的话题