cellfun

Примените функцию к каждой ячейке в массиве ячеек

Синтаксис

A = cellfun(func,C)
A = cellfun(func,C1,...,Cn)
A = cellfun(___,Name,Value)
[A1,...,Am] = cellfun(___)

Описание

пример

A = cellfun(func,C) применяет функциональный func к содержимому каждой ячейки массива ячеек C, одна ячейка за один раз. cellfun затем конкатенирует выходные параметры от func в выходной массив A, так, чтобы для i th элемент C, A(i) = func(C{i}). func входного параметра является указателем на функцию к функции, которая берет один входной параметр и возвращает скаляр. Вывод от func может иметь любой тип данных, пока объекты того типа могут быть конкатенированы. Массив A и массив ячеек C имеет тот же размер.

Вы не можете задать порядок, в котором cellfun вычисляет элементы A, или полагайтесь на то, чтобы они были сделанным в каком-то конкретном порядке.

пример

A = cellfun(func,C1,...,Cn) применяет func к содержимому ячеек C1,...,Cn, так, чтобы A(i) = func(C1{i},...,Cn{i}). Функциональный func должен взять входные параметры n и возвратить скаляр. Массивы ячеек C1,...,Cn у всех должен быть тот же размер.

пример

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

пример

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

Количество выходных аргументов от func не должно совпадать с количеством входных параметров, заданных C1,...,Cn.

Примеры

свернуть все

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

C = {1:10, [2; 4; 6], []}
C = 1x3 cell array
    {1x10 double}    {3x1 double}    {0x0 double}

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

A = cellfun(@mean,C)
A = 1×3

    5.5000    4.0000       NaN

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

X = {5:5:100, 10:10:100, 20:20:100};
Y = {rand(1,20), rand(1,10), rand(1,5)};

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

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

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

C = {1:10, [2; 4; 6], []}
C = 1x3 cell array
    {1x10 double}    {3x1 double}    {0x0 double}

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

[nrows,ncols] = cellfun(@size,C)
nrows = 1×3

     1     3     0

ncols = 1×3

    10     1     0

Можно использовать cellfun, чтобы применить функции к массивам ячеек из символьных векторов и к строковым массивам. cellfun обрабатывает два вида массивов тождественно.

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

C = {'Monday','Tuesday','Wednesday','Thursday','Friday'}
C = 1x5 cell array
    {'Monday'}    {'Tuesday'}    {'Wednesday'}    {'Thursday'}    {'Friday'}

Создайте трехбуквенные сокращения от имен с помощью функции cellfun. Задайте функцию, которая извлекает первые три символа и возвращает их как вектор символов. Чтобы возвратить сокращения в массиве ячеек, задайте пару "имя-значение" 'UniformOutput',false.

A = cellfun(@(x) x(1:3),C,'UniformOutput',false)
A = 1x5 cell array
    {'Mon'}    {'Tue'}    {'Wed'}    {'Thu'}    {'Fri'}

Также можно вызвать cellfun на массиве строк. Для совместимости cellfun обрабатывает каждый элемент массива строк, как будто это был вектор символов. Если вы задаете функцию, которая возвращает текст, то cellfun возвращает его как массив ячеек из символьных векторов, не как массив строк.

Создайте сокращения от имен в массиве строк с помощью cellfun.

str = ["Saturday","Sunday"]
str = 1x2 string array
    "Saturday"    "Sunday"

B = cellfun(@(x) x(1:3),str,'UniformOutput',false)
B = 1x2 cell array
    {'Sat'}    {'Sun'}

Входные параметры

свернуть все

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

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

Обратная совместимость

Можно задать func как вектор символов или представить в виде строки скаляр, а не указатель на функцию, но только для ограниченного набора имен функций. func может быть: 'isempty', 'islogical', 'isreal', 'length', 'ndims', 'prodofsize', 'size' или 'isclass'.

Если вы задаете имя функции, а не указатель на функцию:

  • cellfun не вызывает перегруженных версий функции.

  • size и функции isclass требуют дополнительных входных параметров к функции cellfun:

    A = cellfun('size',C,k) возвращает размер вдоль k th размерность каждого элемента C.

    A = cellfun('isclass',C,classname) возвращает логический 1 (true) для каждого элемента C, который совпадает с аргументом classname. Этот синтаксис возвращает логический ноль (false) для объектов, которые являются подклассом classname.

Пример: A = cellfun(@mean,C) возвращает средние значения элементов C.

Входной массив, заданный как массив ячеек или массив строк. Если C является массивом строк, то cellfun обрабатывает каждый элемент C, как будто это был вектор символов, не строка.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: A = cellfun(@mean,C,'UniformOutput',false) возвращает выходные параметры mean в массиве ячеек. Используйте пару "имя-значение" 'UniformOutput',false, если C содержит числовые матрицы, и mean возвращает векторы.

TRUE или FALSE, заданный как пара, разделенная запятой, состоящая из 'UniformOutput' и или true (1) или false (0).

Значение 'UniformOutput'

Описание

true (1)

func должен возвратить скаляры, которые cellfun конкатенирует в массивы.

false (0)

cellfun возвращает выходные параметры 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', то cellfun повторно выдает ошибку, выданную func.

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

свернуть все

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

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

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

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

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

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

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