内存不足数据的长数组

高数组用于处理由a支持的内存不足的数据数据存储。数据存储使您能够在单独地装入内存小块大型数据集的工作,而不是一次加载整个数据集到内存中。高大的阵列扩展这一功能,使您能够使用常用功能外内存数据的工作。

什么是一个高大的阵列?

由于数据不会一次加载到内存中,所以第一个维度中的高数组可以是任意大的(也就是说,它们可以有任意数量的行)。不需要编写专门的代码来考虑数据的巨大规模,比如使用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 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 59的NaN 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楠楠楠楠的NaN1987年10 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六时42分○○秒 '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二十点55分○○秒 'PS' 1589 'NA'83 82 21的NaN 20 'SAN' 'SMF' 480楠楠0 'NA' 0楠楠楠楠NaN的23-OCT-1987十三时32分00秒 'PS' 1655 'NA' 59 58 13的NaN 12 'BUR''SJC” 296楠楠0 'NA' 0楠楠楠楠NaN的22-OCT-1987六时29分00秒 'PS' 1702 'NA' 77 72的NaN 4 -1 'SMF' 'LAX' 373的NaÑ的NaN 0 'NA' 0楠楠楠楠NaN的28-OCT-1987 14点46分○○秒 '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八时59分00秒 'PS' 1800 'NA' 155 143的NaN 11 -1 'SEA' 'LAX' 954楠楠0 'NA' 0楠楠楠楠楠::::::::::::::::::::::::

创建高大阵列

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

提取到达延迟ArrDelay从长长的时间表中TT。这产生与底层数据类型双新高大数组变量。

A = 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×……高大的数组?吗?吗?...吗?吗?吗?...吗? ? ? ... : : : : : : Preview deferred. Learn more.

与评价收集

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

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

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

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

SIG1 =聚集(one_sigma_bounds)
使用本地MATLAB会话对tall表达式进行求值:-通过1 / 1:在1.5秒内完成求值,在1.8秒内完成求值= -23.4572 7.1201 37.6975

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

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

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

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

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

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

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

如果你有一个高个子阵列TA,那么你可以将它写入该文件夹位置使用以下命令:

写(位置,TA);

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

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

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

金宝app支持功能

大多数核心函数对高数组的工作方式与对内存中的数组的工作方式相同。然而,在某些情况下,函数处理高数组的方式是特殊的或有局限性的。方法中的函数的引用页的底部可以告诉您该函数是否支持高数组,以及它金宝app是否有任何限制扩展功能部分(对于例如,参见filloutliers)。

为了支持高大阵列的所有功能的MATLAB过滤列表,请参阅金宝app函数列表(高数组)

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

也可以看看

||||

相关的话题