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

  • Поддержите присвоение линейной индексацией в объектный массив

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

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

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

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