cellfun

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

Описание

пример

A = cellfun(func,C) применяет функцию func к содержимому каждой камеры массива ячеек C, по одной камере за раз. cellfun затем конкатенирует выходы func в массив выхода A, так что для iпервый элемент 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=1×3 cell array
    {[1 2 3 4 5 6 7 8 9 10]}    {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

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

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

C = {1:10, [2; 4; 6], []}
C=1×3 cell array
    {[1 2 3 4 5 6 7 8 9 10]}    {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
    {'Monday'}    {'Tuesday'}    {'Wednesday'}    {'Thursday'}    {'Friday'}

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. 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' 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', затем cellfun повторно выдает ошибку, выданную func.

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

свернуть все

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

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

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

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

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

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

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