Применить функцию к каждому элементу массива
применяет функцию 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