Примените функцию к каждому элементу массива
применяет функциональный 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]}
cell2mat
| cellfun
| groupsummary
| rowfun
| spfun
| splitapply
| structfun
| varfun