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