Примените функцию к каждому элементу массива
применяет функциональный B = arrayfun(func,A)func к элементам A, один элемент за один раз. arrayfun затем конкатенирует выходные параметры от func в выходной массив B, так, чтобы для iэлемент th A, B(i) = func(A(i)). Входной параметр func указатель на функцию к функции, которая берет один входной параметр и возвращает скаляр. Выход от func может иметь любой тип данных, пока объекты того типа могут быть конкатенированы. Массивы A и B имейте тот же размер.
Вы не можете задать порядок в который arrayfun вычисляет элементы B или используйте то, чтобы они были сделанным в каком-то конкретном порядке.
применяет B = arrayfun(___,Name,Value)func с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы. Например, чтобы возвратить выходные значения в массиве ячеек, задать 'UniformOutput',false. Можно возвратить B как массив ячеек, когда func возвращает значения, которые не могут быть конкатенированы в массив. Можно использовать Name,Value парные аргументы с входными параметрами любого из предыдущих синтаксисов.
[B1,...,Bm] = arrayfun(___) возвращает несколько выходных массивов B1,...,Bm когда func возвращает m выходные значения. func может возвратить выходные аргументы, которые имеют различные типы данных, но тип данных каждого выхода должен быть тем же каждым разом func называется. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.
Количество выходных аргументов от func не должен совпадать с количеством входных параметров, заданных A1,...,An.
Различие в поведении для входных массивов комплексных чисел
Если входной массив A массив комплексных чисел, и некоторые элементы имеют равные нулю мнимые части, затем вызывая arrayfun и индексация в массив может привести к различным результатам. arrayfun функционируйте всегда обрабатывает такие числа как комплексные числа с равными нулю мнимыми частями. Однако индексация возвращает такие значения как вещественные числа.
Чтобы проиллюстрировать различие в поведении, сначала создайте массив комплексных чисел.
A = zeros(2,1); A(1) = 1; A(2) = 0 + 1i
A = 1.0000 + 0.0000i 0.0000 + 1.0000i
Затем создайте массив ячеек и присвойте элементы A к нему. Когда вы индексируете в A(1), его значение возвращено как вещественное число, потому что его мнимая часть равна нулю. И можно сохранить действительный и комплексные числа в различных ячейках C1 потому что массивы ячеек могут хранить данные, имеющие различные типы.
C1 = cell(2,1); C1{1} = A(1); C1{2} = A(2)
C1 =
2×1 cell array
{[ 1]}
{[0.0000 + 1.0000i]}
Вызвать arrayfun и доступ элементы A. Присвойте его значения массиву ячеек. Когда arrayfun доступы A(1), это обрабатывает то значение как комплексное число и присваивает его C2{1}.
C2 = arrayfun(@(x) x, A, 'UniformOutput', false)
C2 =
2×1 cell array
{[1.0000 + 0.0000i]}
{[0.0000 + 1.0000i]}
structfun | cellfun | spfun | cell2mat | splitapply | varfun | rowfun | groupsummary