Применить функцию к каждому элементу массива
применяет функцию B = arrayfun(func,A)func к элементам A, по одному элементу за раз. arrayfun затем конкатенирует выходы func в массив выхода B, так что для iпервый элемент 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]}
cell2mat | cellfun | groupsummary | rowfun | spfun | splitapply | structfun | varfun