exponenta event banner

structfun

Применить функцию к каждому полю скалярной структуры

Описание

пример

A = structfun(func,S) применяет функцию func к каждому полю скалярной структуры Sпо одному полю за раз. structfun затем объединяет выходные сигналы func в вектор столбца A. Входной аргумент func является дескриптором функции, который принимает один входной аргумент и возвращает скаляр. Выходные данные func может иметь любой тип данных, если объекты этого типа могут быть конкатенированы. Количество элементов в A равно количеству полей в S.

Невозможно указать порядок, в котором structfun вычисляет элементы A или полагаться на их выполнение в каком-либо конкретном порядке.

пример

A = structfun(func,S,Name,Value) применяется func с дополнительными опциями, указанными одним или несколькими Name,Value аргументы пары. Например, чтобы вернуть выходные значения в структуре, укажите 'UniformOutput',false. Вы можете вернуться A как структура, когда func возвращает значения, которые не могут быть объединены в массив. Возвращенная структура имеет те же поля, что и S.

пример

[A1,...,Am] = structfun(___) возвращает несколько выходных массивов A1,...,Am когда func прибыль m выходные значения. func может возвращать выходные аргументы, которые имеют различные типы данных, но тип данных каждого вывода должен быть одинаковым каждый раз func вызывается. Этот синтаксис можно использовать с любым из входных аргументов предыдущих синтаксисов.

Примеры

свернуть все

Создайте скалярную структуру с полями, содержащими числовые массивы различных размеров.

S.f1 = 1:10;
S.f2 = [2; 4; 6];
S.f3 = []
S = struct with fields:
    f1: [1 2 3 4 5 6 7 8 9 10]
    f2: [3x1 double]
    f3: []

Вычислите среднее значение каждого числового массива и верните значение в массив.

A = structfun(@mean,S)
A = 3×1

    5.5000
    4.0000
       NaN

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

S.X = rand(1,10);
S.Y = rand(1,10);
S.Z = rand(1,10)
S = struct with fields:
    X: [0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649]
    Y: [0.1576 0.9706 0.9572 0.4854 0.8003 0.1419 0.4218 0.9157 0.7922 0.9595]
    Z: [0.6557 0.0357 0.8491 0.9340 0.6787 0.7577 0.7431 0.3922 0.6555 0.1712]

Постройте графики массивов. Возвращает массив объектов строки диаграммы из plot и используйте их для добавления различных маркеров к каждому набору точек данных. structfun может возвращать массивы любого типа данных, если объекты этого типа данных могут быть объединены.

figure
hold on
p = structfun(@plot,S);
p(1).Marker = 'o';
p(2).Marker = '+';
p(3).Marker = 's';
hold off

Figure contains an axes. The axes contains 3 objects of type line.

Создайте скалярную структуру с полями, содержащими матрицы.

S.f1 = 1:10;
S.f2 = [2 3; 4 5; 6 7];
S.f3 = rand(4,4)
S = struct with fields:
    f1: [1 2 3 4 5 6 7 8 9 10]
    f2: [3x2 double]
    f3: [4x4 double]

Вычислите средние значения каждой матрицы. mean возвращает векторы, содержащие среднее каждого столбца, поэтому средство не может быть возвращено в виде массива. Чтобы вернуть средства в структуре, укажите 'UniformOutput',false пара имя-значение.

A = structfun(@mean,S,'UniformOutput',false)
A = struct with fields:
    f1: 5.5000
    f2: [4 5]
    f3: [0.6902 0.3888 0.7627 0.5962]

Создайте скалярную структуру.

S.f1 = 1:10;
S.f2 = [2 3; 4 5; 6 7];
S.f3 = rand(4,4)
S = struct with fields:
    f1: [1 2 3 4 5 6 7 8 9 10]
    f2: [3x2 double]
    f3: [4x4 double]

Вычислите размеры каждого массива в S. Количество строк и столбцов в числовых массивах 3 на 1.

[nrows,ncols] = structfun(@size,S)
nrows = 3×1

     1
     3
     4

ncols = 3×1

    10
     2
     4

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

свернуть все

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

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

Пример: A = structfun(@max,S) возвращает максимальное значение каждого поля из S.

Входная структура, заданная как скалярная структура.

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

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

Пример: A = structfun(@mean,S,'UniformOutput',false) возвращает выходные данные из mean в структуре с теми же полями, что и S.

True или false, задается как разделенная запятыми пара, состоящая из 'UniformOuput' и либо true (1) или false (0).

Значение 'UniformOutput'

Описание

true (1)

func должен возвращать скаляры, которые structfun сцепляется с вектором-столбцом.

false (0)

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

Функция для обнаружения ошибок, указанная как разделенная запятыми пара, состоящая из 'ErrorHandler' и дескриптор функции. Если func выдает ошибку, а затем обработчик ошибок, указанный 'ErrorHandler' перехватывает ошибку и выполняет действие, указанное в функции. Обработчик ошибок должен либо выдать ошибку, либо вернуть то же количество выходов, что и func. Если значение 'UniformOutput' true, то выходные аргументы обработчика ошибок должны быть скалярами и иметь тот же тип данных, что и выходные данные func.

Первым входным аргументом обработчика ошибок является структура со следующими полями:

  • identifier - Идентификатор ошибки

  • message - Текст сообщения об ошибке

  • index - Линейный индекс во входные массивы, при котором func вызвал ошибку

Остальные входные аргументы обработчика ошибок являются входными аргументами для вызова func сделанный func выдать ошибку.

Предположим func возвращает два двойника в качестве выходных аргументов. Можно указать обработчик ошибок как 'ErrorHandler',@errorFunc, где errorFunc - функция, которая вызывает предупреждение и возвращает два выходных аргумента.

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

Если не указать 'ErrorHandler', то structfun возвращает ошибку, вызванную func.

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

свернуть все

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

По умолчанию structfun объединяет выходные данные func в вектор-столбец. func должен возвращать скаляры. Если func возвращает объекты, затем класс, которому принадлежат объекты, должен соответствовать этим требованиям.

  • Поддержка назначения путем линейного индексирования в массиве объектов

  • Иметь reshape метод, который возвращает массив, имеющий тот же размер, что и входной

Если значение 'UniformOutput' аргумент пары имя-значение false (0), то structfun возвращает выходные данные как поля скалярной структуры. В этом случае результаты func может иметь любые размеры и различные типы данных.

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

.
Представлен до R2006a