structfun

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

Синтаксис

A = structfun(func,S)
A = structfun(func,S,Name,Value)
[A1,...,Am] = 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

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

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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' верно, то выходные аргументы обработчика ошибок должны быть скалярами и иметь совпадающий тип данных как выходные параметры func.

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

  • identifier — Ошибочный идентификатор

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

  • 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