exponenta event banner

rowfun

Применение функции к строкам таблицы или расписания

Описание

B = rowfun(func,A) применяет функцию func к каждой строке таблицы или расписания A и возвращает результаты в таблице или расписании B.

func принимает size(A,2) входные данные.

Если A является расписанием и func агрегирует данные по группам строк, затем rowfun назначает время первой строки из каждой группы строк в A как соответствующее время строки в B. Возвратиться B в виде таблицы без времени строки, укажите 'OutputFormat' как 'table'.

пример

B = rowfun(func,A,Name,Value) применяет функцию func к каждой строке таблицы A с дополнительными опциями, указанными одним или несколькими Name,Value аргументы пары.

Например, можно указать переменные для передачи функции. func и как звонить func.

Примеры

свернуть все

Применить функцию hypot к каждой строке таблицы 5 на 2 A чтобы найти кратчайшее расстояние между переменными x и y.

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

rng('default')
x = randi(10,[5,1]);
y = randi(10,[5,1]);
A = table(x,y)
A=5×2 table
    x     y 
    __    __

     9     1
    10     3
     2     6
    10    10
     7    10

Примените функцию, hypot, к каждой строке A. Функция hypot принимает два входа и возвращает один выход.

B = rowfun(@hypot,A,'OutputVariableNames','z')
B=5×1 table
      z   
    ______

    9.0554
     10.44
    6.3246
    14.142
    12.207

B является таблицей.

Добавьте вывод функции, B, во входную таблицу, A.

[A B]
ans=5×3 table
    x     y       z   
    __    __    ______

     9     1    9.0554
    10     3     10.44
     2     6    6.3246
    10    10    14.142
     7    10    12.207

Определите и примените геометрическую модель броуновского движения к диапазону параметров.

Создание функции в файле с именем gbmSim.m который содержит следующий код.

% Copyright 2015 The MathWorks, Inc.

function [m,mtrue,s,strue] = gbmSim(mu,sigma)
% Discrete approximation to geometric Brownian motion
%
% [m,mtrue,s,strue] = gbmSim(mu,sigma) computes the 
% simulated mean, true mean, simulated standard deviation, 
% and true standard deviation based on the parameters mu and sigma.
numReplicates = 1000; numSteps = 100;
y0 = 1;
t1 = 1;
dt = t1 / numSteps;
y1 = y0*prod(1 + mu*dt + sigma*sqrt(dt)*randn(numSteps,numReplicates));
m = mean(y1); s = std(y1);

% Theoretical values
mtrue = y0 * exp(mu*t1); strue = mtrue * sqrt(exp(sigma^2*t1) - 1);
end

gbmSim принимает два входа, mu и sigmaи возвращает четыре выходных сигнала, m, mtrue, s, и strue.

Определите таблицу, params, содержащий параметры для ввода в броуновскую модель движения.

mu = [-.5; -.25; 0; .25; .5];
sigma = [.1; .2; .3; .2; .1];

params = table(mu,sigma)
params =

  5x2 table

     mu      sigma
    _____    _____

     -0.5     0.1 
    -0.25     0.2 
        0     0.3 
     0.25     0.2 
      0.5     0.1 

Примените функцию, gbmSim, к строкам таблицы, params.

stats = rowfun(@gbmSim,params,...
    'OutputVariableNames',...
    {'simulatedMean' 'trueMean' 'simulatedStd' 'trueStd'})
stats =

  5x4 table

    simulatedMean    trueMean    simulatedStd    trueStd 
    _____________    ________    ____________    ________

       0.60501       0.60653       0.05808       0.060805
       0.77916        0.7788         0.161        0.15733
        1.0024             1        0.3048        0.30688
        1.2795         1.284       0.25851        0.25939
        1.6498        1.6487       0.16285        0.16529

Четыре имени переменных, указанные 'OutputVariableNames' аргумент пары имя-значение указывает, что rowfun должны получить четыре выхода от gbmSim. Можно указать меньшее количество имен выходных переменных для возврата меньшего количества выходных данных из gbmSim.

Добавьте вывод функции, stats, на вход, params.

[params stats]
ans =

  5x6 table

     mu      sigma    simulatedMean    trueMean    simulatedStd    trueStd 
    _____    _____    _____________    ________    ____________    ________

     -0.5     0.1        0.60501       0.60653       0.05808       0.060805
    -0.25     0.2        0.77916        0.7788         0.161        0.15733
        0     0.3         1.0024             1        0.3048        0.30688
     0.25     0.2         1.2795         1.284       0.25851        0.25939
      0.5     0.1         1.6498        1.6487       0.16285        0.16529

Создание таблицы, A, где g является переменной группировки.

rng('default')
g = randi(3,[15,1]);
x = rand([15,1]);
y = rand([15,1]);

A = table(g,x,y)
A=15×3 table
    g       x           y    
    _    ________    ________

    3     0.14189     0.70605
    3     0.42176    0.031833
    1     0.91574     0.27692
    3     0.79221    0.046171
    2     0.95949    0.097132
    1     0.65574     0.82346
    1    0.035712     0.69483
    2     0.84913      0.3171
    3     0.93399     0.95022
    3     0.67874    0.034446
    1     0.75774     0.43874
    3     0.74313     0.38156
    3     0.39223     0.76552
    2     0.65548      0.7952
    3     0.17119     0.18687

Определите анонимную функцию, func, для вычисления средней разницы между x и y.

func = @(x,y) mean(x-y);

Найти среднюю разницу между переменными в группах 1, 2, и 3 определяется переменной группировки, g.

B = rowfun(func,A,...
    'GroupingVariable','g',...
    'OutputVariableName','MeanDiff')
B=3×3 table
    g    GroupCount    MeanDiff
    _    __________    ________

    1        4         0.032744
    2        3          0.41822
    3        8          0.14656

Переменная GroupCount указывает количество строк в A для каждой группы.

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

свернуть все

Функция, заданная как дескриптор функции. Функцию можно определить в файле или как анонимную функцию. Если func соответствует более чем одному файлу функции (то есть, если func представляет собой набор перегруженных функций), MATLAB ® определяет, какую функцию следует вызвать на основе класса входных аргументов.

func может принимать не более size(A,2) входные данные. По умолчанию rowfun возвращает первый вывод func. Возврат нескольких выходных данных из func, используйте 'NumOutputs' или 'OutputVariableNames' аргументы пары имя-значение.

Пример: func = @(x,y) x.^2+y.^2; принимает два входных значения и находит сумму квадратов.

Входная таблица, заданная как таблица или расписание.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'InputVariables',2 использует только вторую переменную в A в качестве входных данных для func.

Спецификаторы для выбора переменных A для передачи в func, указанная как пара, разделенная запятыми, состоящая из 'InputVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив, логический вектор или дескриптор функции.

При указании 'InputVariables' как дескриптор функции, то он должен возвратить логический скаляр, и rowfun передает только переменные в A где функция возвращает 1 (true).

Одна или несколько переменных в A которые определяют группы строк, указанные как разделенная запятыми пара, состоящая из 'GroupingVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Значение 'GroupingVariables' указывает, какие переменные таблицы являются переменными группировки, а не их типами данных. Переменная группировки может быть числовой или иметь тип данных categorical, calendarDuration, datetime, duration, logical, или string.

Строки в A которые имеют одинаковые значения переменной группировки, принадлежат к одной группе. rowfun применяется func к каждой группе строк, а не отдельно к каждой строке A. Выходные данные, B, содержит одну строку для каждой группы.

Если какая-либо переменная группирования содержит NaNs или отсутствующие значения (например, NaTs, неопределенные категориальные значения или отсутствующие строки), то соответствующие строки не принадлежат ни к одной группе и исключаются из вывода.

Метки строк могут быть переменными группировки. Можно группировать только по меткам строк, по одной или нескольким переменным в Aили на метках строк и переменных вместе.

  • Если A является таблицей, то метки являются именами строк.

  • Если A является расписанием, то метки - время строки.

Индикатор для вызова func с отдельными входами, заданными как разделенная запятыми пара, состоящая из 'SeparateInputs' и либо true, false, 1, или 0.

true

func ожидаются отдельные входные данные. rowfun требования func с size(A,2) входные данные, один аргумент для каждой переменной данных.

Это поведение по умолчанию.

false

func ожидает один вектор, содержащий все входные данные. rowfun создает входной вектор для func путем объединения значений в каждой строке A.

Индикатор для передачи значений из переменных ячейки в func, указанная как пара, разделенная запятыми, состоящая из 'ExtractCellContents' и либо false, true, 0, или 1.

true

rowfun извлекает содержимое переменной в A чей тип данных - cell и передает значения, а не ячейки, в func

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

false

rowfun передает ячейки переменной в A чей тип данных - cell кому func.

Это поведение по умолчанию.

Имена переменных для выходов func, указанная как пара, разделенная запятыми, состоящая из 'OutputVariableNames' и символьный вектор, массив ячеек символьных векторов или строковый массив с именами, которые являются непустыми и различными. Количество имен должно равняться количеству выходов, которые требуется вывести из func.

Кроме того, имена переменных должны быть допустимыми идентификаторами MATLAB. Если допустимые идентификаторы MATLAB недоступны для использования в качестве имен переменных, MATLAB использует массив ячеек N символьные векторы формы {'Var1' ... 'VarN'} где N - количество переменных. С помощью функции можно определить допустимые имена переменных MATLAB. isvarname.

Количество выходов из func, указанная как пара, разделенная запятыми, состоящая из 'NumOutputs' и 0 или положительное целое число. Целое число должно быть меньше или равно возможному числу выходов из func.

Пример: 'NumOutputs',2 причины rowfun звонить func с двумя выходами.

Формат B, указанная как пара, разделенная запятыми, состоящая из 'OutputFormat' и либо значение 'table', 'uniform', или 'cell'.

'table'

rowfun возвращает таблицу с одной переменной для каждого вывода func. Для сгруппированных вычислений, B, также содержит переменные группировки.

'table' позволяет использовать функцию, возвращающую значения различных размеров или типов данных. Однако для негруппированных вычислений все выходные данные из func должна иметь одну строку при каждом вызове. Для сгруппированных вычислений все выходные данные из func должно иметь одинаковое количество строк.

Это формат вывода по умолчанию.

'timetable'

rowfun возвращает расписание с одной переменной для каждой переменной в A (или каждой переменной, указанной в 'InputVariables'). Для сгруппированных вычислений, B также содержит переменные группировки.

rowfun создает время строки B из времени строки A. Если время строки назначено B не имеют смысла в контексте вычислений, выполняемых с использованием func, затем укажите формат вывода как 'OutputFormat','table'.

Если A является расписанием, то это формат вывода по умолчанию.

'uniform'

rowfun объединяет значения, возвращенные func в вектор. Все выходные данные func должны быть скалярами с одинаковым типом данных.

'cell'

rowfun прибыль B в виде массива ячеек. 'cell' позволяет использовать функцию, возвращающую значения различных размеров или типов данных.

Функция для вызова, если func ошибка, указанная как пара, разделенная запятыми, состоящая из 'ErrorHandler' и дескриптор функции. Определите эту функцию так, чтобы она повторяла ошибку или возвращала допустимые выходы для функции func.

MATLAB вызывает указанную функцию обработки ошибок с двумя входными аргументами:

  • Структура со следующими полями:

    identifier

    Идентификатор ошибки.

    message

    Текст сообщения об ошибке.

    index

    Индекс строки или группы, в которой произошла ошибка.

  • Набор входных аргументов для функции func во время ошибки.

Например,

function [A, B] = errorFunc(S, varargin)
warning(S.identifier, S.message);
A = NaN; B = NaN;

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

свернуть все

Выходная таблица, возвращаемая как таблица или расписание. B может хранить метаданные, такие как описания, единицы измерения переменных, имена переменных и имена строк. Дополнительные сведения см. в разделах «Свойства» table или timetable.

Представлен в R2013b