Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

gather

执行排队的运算后,将 tall 数组收集到内存中

说明

示例

Y = gather(X) 对尚未计算、但需要计算的 tall 数组 X 执行所有必需的排队运算,然后将结果作为 Y 收集到内存中。

如果 gather 的计算结果太大,可能导致 MATLAB® 内存不足。如果您不确定结果是否能够完全放入内存,请使用 gather(head(X))gather(tail(X)) 执行完整计算,但只将一小部分结果放入内存。

请谨慎使用 gather,以确保在计算过程中尽可能合并额外的数据遍历。有关详细信息,请参阅 Lazy Evaluation of Tall Arrays

示例

[Y1,Y2,Y3,...] = gather(X1,X2,X3,...) 将多个未计算的 tall 数组 X1, X2, X3,... 收集到对应的输出 Y1, Y2, Y3,... 中。

示例

全部折叠

airlinesmall.csv 数据集创建数据存储。选择要使用的变量子集,并将 'NA' 值视为缺失数据,从而让 tabularTextDatastore 将它们替换为 NaN 值。将数据存储转换为 tall 表。

varnames = {'Year','ArrDelay','UniqueCarrier'};
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA',...
    'SelectedVariableNames',varnames);
T = tall(ds)
T =

  Mx3 tall table

    Year    ArrDelay    UniqueCarrier
    ____    ________    _____________

    1987        8          {'PS'}    
    1987        8          {'PS'}    
    1987       21          {'PS'}    
    1987       13          {'PS'}    
    1987        4          {'PS'}    
    1987       59          {'PS'}    
    1987        3          {'PS'}    
    1987       11          {'PS'}    
     :         :              :
     :         :              :

计算 tall 表的大小。

sz = size(T)
sz =

  1x2 tall double row vector

    ?    ?

MATLAB® 不会立即计算对 tall 数组执行的大多数运算。相反,MATLAB 会记住您在输入时执行的操作,并在后台优化计算。

当您对未计算的 tall 数组使用 gather 时,MATLAB 会使用最少数量的数据遍历执行所有排队的操作。这种优化可大大减少大型计算的执行时间。因此,仅当您需要查看结果时,才应该使用 gather

使用 gather 执行计算,并将结果收集到内存中。

S = gather(sz)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.57 sec
Evaluation completed in 0.74 sec
S = 1×2

      123523           3

使用 gather 和多个输入同时计算多个 tall 数组。

使用由 1 到 1000 之间的随机整数组成的一个内存数组,创建一个 tall 数组。计算每一列中的最大值和最小值。

A = tall(randi(1000,100,7))
A =

  100x7 tall double matrix

   815   163   645    60   423   583   851
   906   795   379   682    95   541   561
   127   312   812    43   599   870   930
   914   529   533    72   471   265   697
   633   166   351   522   696   319   583
    98   602   940    97   700   120   816
   279   263   876   819   639   940   880
   547   655   551   818    34   646   989
    :     :     :     :     :     :     :
    :     :     :     :     :     :     :
b = min(A);
c = max(A);

根据这些结果确定数组中的整体最小值和最大值。将最终结果收集到内存中。

[mnA,mxA] = gather(min(b),max(c));
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.17 sec
Evaluation completed in 0.43 sec
valRange = [mnA mxA]
valRange = 1×2

           1        1000

输入参数

全部折叠

未计算的 tall 数组。未计算的 tall 数组是指在执行计算时未使用 gather 函数执行完运算的任何 tall 数组。

输出参量

全部折叠

内存数组。Y 的数据类型与未计算的 tall 数组 X 的基础数据类型相同。

提示

  • 返回多个输出参量的函数必须使用变量向 gather 提供所有输出。例如,

    [a,b] = bounds(X);
    [a,b] = gather(a,b);

  • 如果您拥有 Parallel Computing Toolbox™,请参阅 gather (Parallel Computing Toolbox),以了解有关收集 distributedgpuArray 计算的信息。

扩展功能

tall 数组
对行数太多而无法放入内存的数组进行计算。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2016b 中推出