主要内容

高阵列的延期评估

高阵列和内存MATLAB之间的差异之一®阵列是高大的阵列通常仍然存在未约名直到您请求执行计算。(此规则的例外包括绘制函数,如阴谋直方图和一些统计拟合功能Fitlm.,自动评估高阵列输入。)当高阵列处于未评估状态时,MATLAB可能不知道其大小,其数据类型或其包含的特定值。但是,您仍然可以在计算中使用未评估的数组,就像已知的值一样。这允许您使用大数据集快速工作,而不是等待每个命令执行。出于这个原因,建议您使用收集只有当您需要输出时才。

当您输入它们时,MATLAB跟踪您在未评名的高阵列上执行的所有操作。当你最终打电话收集为了评估排队的操作,Matlab使用未评估命令的历史来通过最小化通过数据的传递数来优化计算。正常使用,这种优化可以通过通过大数据集消除不必要的传递来节省大量的执行时间。

显示未评估的高阵列

未评估的高阵列的显示因Matlab知识了解阵列及其值的数量而异。显示屏中有三条信息:

  • 数组大小- 未知的尺寸大小由变量表示m或者N在显示屏中。如果没有已知维度尺寸,则大小将显示为mxnx ....

  • 数组数据类型- 如果阵列具有未知的底层数据类型,则其类型将显示为高大的阵列。如果该类型是已知的,则将其列为例如,高大的双数组

  • 数组值- 如果数组值未知,则它们显示为。显示已知值。

根据计算的性质,Matlab可能知道所有关于给定高阵列的这些信息。

例如,如果阵列具有已知的数据类型但未知的大小和值,则“未评值的高阵列”可能如下所示:

m×n×...高级阵列???......???......???... :::::::::

如果已知类型和相对大小,则显示屏可能是:

1×n高焦炭阵列???......

如果已知某些数据,则MATLAB显示已知值:

100×3高大双矩阵0.8147 0.1622 0.6443 0.9058 0.7943 0.3786 0.1270 0.3112 0.8116 0.9134 0.5285 0.5328 0.6324 0.1656 0.3507 0.0975 0.6020 0.9390 0.2785 0.2630 0.8759 0.5469 0.6541 0.5502::::::

评估收集

收集功能用于评估高阵列。收集接受高阵列作为输入并将内存阵列返回为输出。因此,您可以将此功能视为高阵列和内存阵列之间的桥梁。例如,您无法控制如果或者尽管使用高逻辑阵列的循环语句,但一旦阵列进行了评估收集它成为可以在这些上下文中使用的内存内存逻辑值。

收集在高大的数组上执行所有排队的操作并返回全部的导致内存。自从收集将结果作为内存MATLAB阵列返回,标准内存注意事项适用。如果结果返回的结果,Matlab可能会耗尽内存收集太大了。

大多数时候你可以使用收集要查看计算的整个结果,特别是如果计算包括减少操作,例如或者吝啬的。但是,如果结果太大以适合内存,那么您可以使用聚集(头(x))或者聚拢(尾部(x))要执行计算并仅查看结果的第一个或最后一行。

解决错误收集

如果您输入错误的命令和收集未能评估一个高阵列变量,那么您必须从工作区中删除变量并使用高阵列使用只要有效命令。这是因为在进入它们时,MATLAB跟踪您在未评估的高阵列上执行的所有操作。使MATLAB“忘记”关于错误陈述的唯一方法是从头开始重建高阵列。

示例:计算高阵列的大小

此示例显示了一个未评估的高阵列的样子,以及如何评估数组。

创建数据集的数据存储Airlinesmall.csv.。将数据存储转换为高表,然后计算大小。

varnames = {'arrdelay''depdelay''起源''ide'};ds = tabulartextdataStore('airlinesmall.csv''尾声''na'......'selectedvariamblenames',varnames);tt =高(DS)
tt = m×4高桌子arrdelay depdelay orign dest ________ ________ ______ _____ 8 12'lax''sjc'8 1'sjc''bur'21 20'san'smf'13 12'bur'sjc'4 -1'SMF''LAX'59 63'LAX''SJC'3-2'SAN'SFO'CFO'11 -1'SEA'LAX'::::::::::::::::::::::::::::::::::::::::::::::::::::::::
s = size(tt)
s = 1×2高双排矢量??预览延迟。学到更多。

计算高阵列的大小返回一个小答案(1×2向量),但显示器指示整个通过数据仍然需要计算大小TT.

使用收集功能完全评估高阵列并将结果带入内存中。当命令执行时,在命令窗口中存在动态进度显示,这些都会在很长的计算中特别有用。

笔记

始终确保结果返回收集将能够适应记忆。如果你使用收集直接在高大的阵列上使用诸如的函数减少其尺寸吝啬的,然后matlab可能会用完内存。

tablesize =聚集(s)
使用本地MATLAB会话评估高表达: - 通过1/1:在0.42秒的评估中完成0.48秒的评估= 123523 4

示例:具有高阵列的多通计算

此示例显示了如何组合若干计算,以最小化通过数据的通过的总数。

创建数据集的数据存储Airlinesmall.csv.。将数据存储转换为高大的表格。

varnames = {'arrdelay''depdelay''起源''ide'};ds = tabulartextdataStore('airlinesmall.csv''尾声''na'......'selectedvariamblenames',varnames);tt =高(DS)
tt = m×4高桌子arrdelay depdelay orign dest ________ ________ ______ _____ 8 12'lax''sjc'8 1'sjc''bur'21 20'san'smf'13 12'bur'sjc'4 -1'SMF''LAX'59 63'LAX''SJC'3-2'SAN'SFO'CFO'11 -1'SEA'LAX'::::::::::::::::::::::::::::::::::::::::::::::::::::::::

减去平均值DEPDELAYarrdelay.创建一个新变量adjarrdelay.。然后计算平均值adjarrdelay.并减去这一平均值adjarrdelay.。如果这些计算全部单独评估,则MATLAB需要四次通过数据。

Adjarrdelay = tt.arrdelay  - 意思(tt.depdelay,'omitnan');adjanrdelay = adjarrdelay  - 意思(adjanrdelay,'omitnan'
adjanrdelay = m×1高双柱矢量???::预览推迟。学到更多。

评估adjarrdelay.并查看前几行。因为可以组合一些计算,所以只需要三次通过数据。

聚集(头(adjanrdelay))
使用本地MATLAB会话评估高表达: - 通过0.4秒 - 通行证的第1条:第3条:完成0.39秒 - 通行证3:在0.23秒评估中完成1.2秒ans = 0.8799 0.8799 13.8799 5.8799-3.1201 51.8799 -4.1201 3.8799

行为和建议摘要

  1. 在您请求输出之前,高阵列仍未高估收集

  2. 收集在大多数情况下,评估高阵列计算。如果您认为计算结果可能不适合内存,然后使用聚集(头(x))或者聚拢(尾部(x))反而。

  3. 主要使用未评估的高阵列,仅在必要时请求输出。其中的排队计算越少,优化MATLAB可以做的越多,以最小化通过数据的传递数量。

  4. 如果输入错误的高阵列命令和收集未能评估一个高阵列变量,那么您必须从工作区中删除变量并使用高阵列使用只要有效命令。

也可以看看

|

相关话题