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

高大阵列用于工作与由一个支持的存储器外的数据数据存储。数据存储使您能够在小块中处理大型数据集,这些小块分别适合内存,而不是一次将整个数据集加载到内存中。Tall数组扩展了此功能,使您能够使用常用函数处理内存不足的数据。

什么是一个高大的阵列?

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

高大阵列的优势

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

注意

以来收集将结果作为内存中的MATLAB数组返回,适用于标准内存考虑。MATLAB可能会耗尽内存,如果返回的结果收集过大。

创建高大表

高大的表像内存MATLAB表,但他们可以有任何的行数。从大的数据集创建一个高大的表,你首先需要创建一个用于数据的存储。如果数据存储DS包含表格数据,然后高(DS)返回一个高大的表或包含数据高大时间表。看到数据存储有关创建数据存储更多的信息。

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

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,等等。将所有这些日期时间信息合并到一个新的tall日期时间变量中日期,这是根据发车时间DepTime。然后,使用创建一个高大的时间表日期作为行倍。以来日期是仅在表的日期时间的变量,该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 = 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 954南南“海”“宽松”0“NA”南南南南南::::::::::::::::::::::::

创建高大阵列

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

提取到达延迟ArrDelay从长远来看TT。这产生与底层数据类型双新高大数组变量。

一个= TT.ArrDelay
A = M×1个高大双列向量8 8 21 13 4 59 3 11:

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

延迟评价

高大的阵列中的一个重要方面是,当你与他们的工作,大部分操作都不会立即执行。这些操作出现快速执行,因为实际的计算被推迟,直到你明确要求的计算来进行。你可以触发一个高大的阵列的评价与任收集功能(使结果到存储器)或功能(将结果写入磁盘)。这推迟的评价是很重要的,因为即使一个简单的命令状大小(X)有十亿行一个高大的阵列上执行不是一个快速计算。

当您使用高数组时,MATLAB会跟踪要执行的所有操作。然后,使用该信息优化在请求输出时所需的数据传递次数收集函数。因此,使用未计算的高数组并仅在需要时请求输出是正常的。有关更多信息,请参见高大阵列的递延评价

计算到达延迟的平均值和标准偏差。使用这些值来构建的上部和下部阈值是平均值的一个标准偏差之内的延迟。请注意,每个操作的结果表明,该阵列还没有被计算。

M =平均值(一,'omitnan'
米=高双?预览延期。学到更多。
S = STD(一,'omitnan'
s =高?预览延期。学到更多。
one_sigma_bounds = [M-S,M,M + s]的
one_sigma_bounds = M×N×...高大阵列???...???...???...::::::预览推迟。 Learn more.

与评价收集

延迟评估的好处是,在时机成熟时对MATLAB进行计算,它往往是可能的操作以这样的方式,通过数据传递的数量最小化结合起来。所以,即使你执行许多操作,MATLAB不仅使通过在绝对必要的额外的数据传递。

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

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

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

SIG1 =聚集(one_sigma_bounds)
使用本地MATLAB会话计算tall expression: - Pass 1 of 1:在1.5秒内完成计算在1.8秒内完成sig1 = -23.4572 7.1201 37.6975

可以指定多个输入和输出收集如果你想在一次评估几个高大的阵列。这种技术比调用更快收集多次。例如,计算出最小和最大到达延迟。分开计算,每个值需要通过数据来计算总共两次通过的一通。然而,计算这两个值同时仅需要一个通过数据通。

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

这些结果表明,平均而言,大多数航班约7分钟迟到。但它是一个标准差之内的航班将增长进行到37分钟下旬或23分早。在数据集中的最快捷的航班抵达约提前一个小时,和最新的航班被许多小时的延迟。

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

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

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

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

如果你有一个很高的数组TA,然后可以将其写入文件夹位置使用以下命令:

写(位置,TA);

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

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

此外,还可以使用功能到一个高大的阵列的触发评估并将结果写入到磁盘。这种使用类似于收集然而,不会将任何结果带入内存。

万博1manbetx支持功能

大多数核心功能的工作方式相同高大的数组,因为它们在存储器阵列做。然而,在某些情况下,一个功能与高大的阵列工作方式是特殊或有一定的局限性。你可以告诉函数是否支持高大阵列,如果有任何限制,通过在参考页的底万博1manbetx部寻找的功能扩展功能部分(对于例如,参见filloutliers)。

为了支持高大阵列的所有功能的MATLAB过滤列表,请参阅万博1manbetx函数列表(高数组)

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

也可以看看

||||

相关话题