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