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;

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;

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, ...] произойдите из того же индекса в высокой размерности, приняв, что длинный массив является неодиночным элементом в высокой размерности. Например, если tX и tY неодиночный элемент в высокой размерности, затем первым набором блоков может быть 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,... должен иметь совместимые высоты. Два входных параметров имеют совместимую высоту, когда у них есть та же высота, или когда один вход имеет высоту один.

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

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

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

свернуть все

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

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

Больше о

свернуть все

Блоки длинного массива

Когда вы создаете длинный массив из datastore, базовый datastore упрощает перемещение данных во время вычисления. Перемещения данных в дискретных частях вызвали блоки или фрагменты, где каждый блок является набором последовательных строк, которые могут уместиться в памяти. Например, одним блоком 2D массива (такого как таблица) является 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