matlab.tall.transform

Преобразуйте массив путем применения указателя на функцию к блокам данных

Описание

пример

tA = matlab.tall.transform(fcn,tX) применяет указатель на функцию fcn каждому блоку массива tX и возвращает преобразованный массив, tA.

пример

tA = matlab.tall.transform(fcn,tX,tY,...) задает несколько массивов tX,tY,... которые являются входами в fcn. Одни и те же строки каждого массива обрабатываются fcn; для примера, fcn(tX(n:m,:),tY(n:m,:)). Входы с высотой единицы передаются на каждый вызов fcn.

пример

[tA,tB,...] = matlab.tall.transform(fcn,tX,tY,...) , где fcn - функция, которая возвращает несколько выходов, возвращает массивы tA,tB,..., каждый из которых соответствует одному из выходных аргументов fcn. Все выходы fcn должен иметь ту же высоту, и количество выходов должно совпадать с количеством, которое запрашивается у matlab.tall.transform.

пример

[tA,tB,...] = matlab.tall.transform(___,'OutputsLike',{PA,PB,...}) указывает, что выходы tA,tB,... имеют те совпадающие типы данных, что и прототипные массивы PA,PB,..., соответственно. Можно использовать любой из комбинаций входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Использование matlab.tall.transform чтобы создать длинный массив нулей с атрибутами, подобными другому массив.

Создайте длинная таблица для airlinesmall.csv набор данных. Данные содержат информацию о времени прибытия и вылета американских рейсов. Извлечение ArrDelay переменная, которая является вектором задержек прибытия.

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA');
ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'};
tt = tall(ds);
tX = tt.ArrDelay
tX =

  Mx1 tall double column vector

     8
     8
    21
    13
     4
    59
     3
    11
    :
    :

Напишите анонимную функцию, которая создает массив нулей с таким же размером и типом данных, как и вход.

zerosLike = @(in) zeros(size(in),'like',in);

Использование matlab.tall.transform для применения zerosLike функция в вектор задержек прибытия. Результатом является высокий вектор того же размера, но все значения которого равны нулю.

s = matlab.tall.transform(zerosLike, tX)
s =

  Mx1 tall double column vector

     0
     0
     0
     0
     0
     0
     0
     0
     :
     :

Вычислите среднюю общую задержку рейса из векторов задержек прибытия и вылета.

Создайте длинная таблица для airlinesmall.csv набор данных. Данные содержат информацию о времени прибытия и вылета американских рейсов. Извлечение ArrDelay и DepDelay переменные, которые являются векторами задержек прибытия и вылета.

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA');
ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'};
tt = tall(ds);
tX = tt.ArrDelay;
tY = tt.DepDelay;

The meanDelay функция конкатенирует входные векторы в матрицу, суммирует значения в каждой строке (игнорируя NaNs), а затем вычисляет среднее значение. Отображение содержимого этой функции файла.

type meanDelay
function D = meanDelay(a,b)
X = [a b];
Y = sum(X,2,'omitnan');
D = mean(Y);
end

Использование matlab.tall.transform для применения meanDelay функцию каждому блоку данных в tX и tY. Результатом является средняя общая задержка в каждом блоке данных.

d = matlab.tall.transform(@meanDelay, tX, tY)
d =

  7x1 tall double column vector

   14.0621
   11.1639
   17.2311
   15.1852
   12.5860
   19.8596
   14.4036

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

Найдите максимальное значение и индекс этого значения в каждой строке данных.

Создайте длинная таблица для airlinesmall.csv набор данных. Данные содержат информацию о времени прибытия и вылета американских рейсов. Извлечение ArrDelay и DepDelay переменные, которые являются векторами задержек прибытия и вылета.

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA');
ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'};
tt = tall(ds);
tX = tt.ArrDelay;
tY = tt.DepDelay;

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

type maxDelay
function [M,I] = maxDelay(A,B)
X = [A B];
[M,I] = max(X,[],2);
end

Использование matlab.tall.transform для применения maxDelay функцию каждому блоку данных в tX и tY. Результатом является максимальная задержка прибытия или отбытия для каждой строки данных, а также вектор индекса, указывающий, из какого столбца пришло максимальное значение. Индекс 1 указывает, что задержка прибытия в этой строке больше, а индекс 2 указывает, что задержка отправления больше.

[M, idx] = matlab.tall.transform(@maxDelay, tX, tY)
M =

  Mx1 tall double column vector

    12
     8
    21
    13
     4
    63
     3
    11
    :
    :


idx =

  Mx1 tall double column vector

     2
     1
     1
     1
     1
     2
     1
     1
     :
     :

Используйте 'OutputsLike' опция для возврата таблицы из matlab.tall.transform который имеет другие переменные из таблицы входа.

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

T = tall(table(rand(1e6,1),rand(1e6,1)))
T =

  1,000,000x2 tall table

     Var1       Var2  
    _______    _______

    0.81472    0.90399
    0.90579    0.94095
    0.12699    0.80252
    0.91338    0.24205
    0.63236    0.97566
    0.09754    0.31723
     0.2785    0.81279
    0.54688    0.69743
       :          :
       :          :

Функция tableDiff вычисляет различие между два входа табличных переменных и добавляет результат как новую переменную в таблице. Отображение содержимого файла.

type tableDiff
function Tout = tableDiff(Tin)
d = Tin.Var2 - Tin.Var1;
Tin.Var3 = abs(d);
Tout = Tin;
end

Использование matlab.tall.transform для применения tableDiff функцию каждому блоку данных в T. Поскольку таблица выхода имеет другие переменные от таблицы входа, используйте 'OutputsLike' пара "имя-значение" для подачи таблицы прототипов с такими же переменными, как и выход (три переменные с именами по умолчанию Var1, Var2, и Var3).

Z = matlab.tall.transform(@tableDiff, T, 'OutputsLike', {table(1,1,1)})
Z =

  Mx3 tall table

     Var1       Var2        Var3  
    _______    _______    ________

    0.81472    0.90399    0.089267
    0.90579    0.94095    0.035156
    0.12699    0.80252     0.67553
    0.91338    0.24205     0.67133
    0.63236    0.97566      0.3433
    0.09754    0.31723     0.21969
     0.2785    0.81279     0.53429
    0.54688    0.69743     0.15054
       :          :          :
       :          :          :

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

свернуть все

Функция преобразования для применения, заданная как указатель на функцию или анонимная функция. Каждый выход fcn должен быть того же типа, что и первый вход tX. Можно использовать 'OutputsLike' опция для возврата выходов различных типов данных. Если fcn возвращает несколько выходы, все выходы должны иметь одинаковую высоту.

Общая функциональная подпись fcn является

[a, b, c, ...] = fcn(x, y, z, ...)
fcn должны удовлетворять этим требованиям:

  1. Входные параметры - Входы [x, y, z, ...] являются блоками данных, которые помещаются в памяти. Блоки генерируются путем извлечения данных из соответствующих входов длинный массив [tX, tY, tZ, ...]. Входы [x, y, z, ...] удовлетворить этим свойствам:

    • Все [x, y, z, ...] иметь тот же размер в первой размерности после любого допустимого расширения.

    • Блоки данных в [x, y, z, ...] происходит от того же индекса в tall размерности, принимая, что длинный массив является nonsingleton в tall размерности. Для примера, если tX и tY nonsingleton в tall размерности, тогда первый набор блоков может быть x = tX(1:20000,:) и y = tY(1:20000,:).

    • Если первая размерность любого из [tX, tY, tZ, ...] имеет размер 1, затем соответствующий блок [x, y, z, ...] состоит из всех данных в этот длинный массив.

  2. Выходные аргументы - выходы [a, b, c, ...] являются блоками, помещаемыми в памяти, которые передаются на соответствующие выходы [tA, tB, tC, ...]. Выходные выходы [a, b, c, ...] удовлетворить этим свойствам:

    • Все [a, b, c, ...] должен иметь тот же размер в первой размерности.

    • Все [a, b, c, ...] сгруппированы по вертикали с соответствующими результатами предыдущих вызовов в fcn.

    • Все [a, b, c, ...] передаются к тому же индексу в первой размерности в соответствующих выходных массивах назначения.

  3. Функциональные правила - fcn должен удовлетворять функциональному правилу:

    • F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]Применение функции к конкатенации входов должно быть таким же, как применение функции к входам отдельно, а затем конкатенация результатов.

  4. Пустые входы - убедитесь, что fcn может обрабатывать вход высотой 0. Пустые входы могут возникнуть, когда файл пуст или если вы сделали много фильтрации данных.

Для примера эта функция принимает два массива входа, квадраты и возвращает два выхода массива:

function [xx,yy] = sqInputs(x,y)
xx = x.^2;
yy = y.^2;
end 
После того, как вы сохраняете эту функцию в доступной папке, можно вызвать функцию в квадрат tX и tY с помощью этой команды:
[tA,tB] = matlab.tall.transform(@sqInputs,tX,tY)

Пример: tA = matlab.tall.transform(@(x) x .* 2, tX) задает анонимную функцию, чтобы умножить значения в tX по 2.

Пример: tC = matlab.tall.transform(@plus,tX,tY) задает указатель на функцию @plus чтобы добавить два массива вместе.

Типы данных: function_handle

Входные массивы, заданные как скаляры, векторы, матрицы или многомерные массивы. Входные массивы используются в качестве входов в заданную функцию fcn. Каждый входной массив tX,tY,... должны иметь совместимые высоты. Два входа имеют совместимую высоту, когда они имеют одинаковую высоту, или когда один вход имеет высоту 1.

Прототип выхода массивов, заданный как массивы. Когда вы задаете 'OutputsLike', выходные массивы tA,tB,... возвращено matlab.tall.transform имеют те совпадающие типы данных, что и указанные массивы {PA,PB,...}.

Пример: tA = matlab.tall.transform(fcn,tX,'OutputsLike',{int8(1)});, где tX - массив двойной точности, возвращает A как int8 вместо double.

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

свернуть все

Выходные массивы, возвращенные как скаляры, векторы, матрицы или многомерные массивы. Если какой-либо вход в matlab.tall.transform tall, тогда все выходные аргументы также высокие. В противном случае все выходные аргументы являются массивами в памяти.

Размер и тип данных выходных массивов зависят от заданной функции fcn. В целом выходы tA,tB,... все должны иметь тот совпадающий тип данных, что и первый вход X. Однако можно задать 'OutputsLike' для возврата различных типов данных. Массивы выхода tA,tB,... все имеют одинаковую высоту.

Подробнее о

свернуть все

Блоки Длинный массив

Когда вы создаете длинный массив из datastore, базовый datastore облегчает перемещение данных во время вычисления. Данные перемещаются дискретными частями, называемыми блоками или фрагментами, где каждый блок является набором последовательных строк, которые могут помещаться в памяти. Например, один блок 2-D массива (такого как таблица) X(n:m,:), для некоторых нижних индексов n и m. Размер каждого блока основан на значении ReadSize свойство datastore, но блок может быть не того размера. В целях matlab.tall.transform, длинный массив рассматривается как вертикальная конкатенация многих таких блоков:

Для примера, если вы используете sum функция как функция преобразования, результатом является сумма на блок. Поэтому вместо возврата одинарного скалярного значения для суммы элементов результата является вектором с длиной, равной количеству блоков.

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA');
ds.SelectedVariableNames = {'ArrDelay' 'DepDelay'};
tt = tall(ds);
tX = tt.ArrDelay;

f = @(x) sum(x,'omitnan');
s = matlab.tall.transform(f, tX);
s = gather(s)
s =

      140467
      101065
      164355
      135920
      111182
      186274
       21321

Введенный в R2018b