对于超出的内存数据高大数组

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

什么是一个高大的阵列?

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

高大阵列的优势

不像在存储器阵列,直到请求的计算使用来执行高阵列通常保持未计算的收集功能。这个递延评价允许您使用大型数据集迅速开展工作。当您使用最终要求输出收集,MATLAB结合了排队计算在可能的情况,并通过数据取遍的最小数目。通过数据传递的数量极大地影响的执行时间,因此建议你仅在必要时请求输出。

注意

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

创建高大表

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

创建电子表格数据存储,它指向航空公司飞行数据的表格文件。对于包含文件的文件夹集合,您可以指定整个文件夹的位置,或者使用通配符,“* .csv格式,包括与数据存储中的同一个文件扩展名的多个文件。通过清洁处理数据'NA'值丢失的数据,以便tabularTextDatastore它们替换为NaN值。此外,一些文本变量的格式设置为%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的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六时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的NaN为NaN 0 'NA' 0楠楠楠楠NaN的28-OCT-1987十四时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。这产生与底层数据类型双新高大数组变量。

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

classUnderlyingisaUnderlying功能是确定一个高大的阵列的基础数据类型是有用的。

递延评价

高大的阵列中的一个重要方面是,当你与他们的工作,大部分操作都不会立即执行。这些操作出现快速执行,因为实际的计算被推迟,直到你明确要求的计算来进行。你可以触发一个高大的阵列的评价与任收集功能(使结果到存储器)或功能(将结果写入磁盘)。这推迟的评价是很重要的,因为即使一个简单的命令状大小(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会话高表达: - 通的1 1:在1.5秒评价完成在1.8秒SIG1 = -23.4572 7.1201 37.6975完成

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

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

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

保存,加载,和高大点校验阵列

保存函数保存一个高大的阵列,但不复制的任何数据。所结果的。垫文件通常很小。然而,原始的数据文件必须按顺序在同一位置提供给随后使用加载

功能使得数据的副本,并保存副本文件的集合,它可以消耗大量的磁盘空间。执行高阵列计算的值写入前上所有待处理操作。一旦复制数据,它独立于原始数据的。因此,您可以即使原始数据不再可用重新从书面文件高大的阵列。

您可以通过创建一个新的数据存储,使其指向的文件写入的位置重新从书面文件高大的阵列。此功能使您能够创建检查站要么快照的高阵列数据。创建检查点是一个很好的方式,以节省您的预处理数据的结果,使数据处于一种形式,更高效的负载。

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

写(位置,TA);

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

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

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

万博1manbetx支持功能

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

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

高大的阵列也由几个工具箱的支持,使您能够做万博1manbetx这样的事情写的机器学习算法,部署独立应用程序,并运行计算并行或集群上。欲了解更多信息,请参阅扩展与其他产品高大阵列s manbetx 845

也可以看看

||||

相关话题