сбор

Соберите длинный массив в память после выполняющихся операций в очереди

Синтаксис

Y = gather(X)
[Y1,Y2,Y3,...] = gather(X1,X2,X3,...)

Описание

пример

Y = gather(X) выполняет все операции в очереди, требуемые вычислить неоцененный длинный массив X, и собирает результаты в память как Y.

MATLAB® может исчерпать память, если результат вычисления gather является слишком большим. Если вы не уверены, может ли результат уместиться в памяти, используйте gather(head(X)) или gather(tail(X)), чтобы выполнить полное вычисление, но принести только небольшую часть результата в память.

Используйте gather экономно, чтобы гарантировать, что дополнительные проходы через данные объединены во время вычислений, когда это возможно. Для получения дополнительной информации смотрите Отсроченную оценку Длинных массивов.

пример

[Y1,Y2,Y3,...] = gather(X1,X2,X3,...) собирает несколько неоцененных длинных массивов X1, X2, X3,... в соответствующие выходные параметры Y1, Y2, Y3,....

Примеры

свернуть все

Создайте datastore для набора данных airlinesmall.csv. Выберите подмножество переменных, чтобы работать с и обработать значения 'NA' как недостающие данные так, чтобы datastore заменил их на значения NaN. Преобразуйте datastore в длинную таблицу.

varnames = {'Year','ArrDelay','UniqueCarrier'};
ds = datastore('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'     
     :         :              :
     :         :              :

Вычислите размер длинной таблицы.

sz = size(T)
sz =

  1x2 tall double row vector

    ?    ?

MATLAB® сразу не оценивает большинство операций на длинных массивах. Вместо этого MATLAB помнит операции, которые вы выполняете, когда вы вводите их, и оптимизирует вычисления в фоновом режиме.

Когда вы используете gather на неоцененном длинном массиве, MATLAB выполняет все операции в очереди с помощью минимального количества проходов через данные. Эта оптимизация значительно уменьшает время выполнения больших вычислений. Поэтому необходимо использовать gather только, когда необходимо видеть результат.

Используйте gather, чтобы выполнить вычисление и собрать результат в память.

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

      123523           3

Используйте gather с несколькими входными параметрами, чтобы одновременно оценить несколько длинных массивов.

Создайте длинный массив из массива в оперативной памяти случайных целых чисел между 1 и 1000. Вычислите максимальные и минимальные значения в каждом столбце.

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:
Evaluation completed in 0.31 sec
valRange = [mnA mxA]
valRange = 1×2

           1        1000

Входные параметры

свернуть все

Неоцененный длинный массив. Неоцененный длинный массив является любым длинным массивом, на котором вы выполняете вычисления, не используя gather, чтобы полностью оценить те вычисления.

Выходные аргументы

свернуть все

Массив в оперативной памяти. Тип данных Y совпадает с базовым типом данных неоцененного длинного массива X.

Советы

  • Если у вас есть Parallel Computing Toolbox™, смотрите gather для получения информации о сборе вычисления gpuArray и distributed.

Расширенные возможности

"Высокие" массивы
Осуществление вычислений с массивами, которые содержат больше строк, чем помещается в памяти.

Введенный в R2017b

Для просмотра документации необходимо авторизоваться на сайте