arrayfun

Aplica uma função a cada elemento de um ou mais arrays.

Categoria: Language Fundamentals > Data Types

Sintaxe

B = arrayfun(func, A)

Chama func em cada elemento de A e reúne os resultados escalares em um array do mesmo tamanho.

B = arrayfun(func, A1, ..., An)

Passa elementos correspondentes de vários arrays de mesmo tamanho.

[B1, ..., Bm] = arrayfun(___)

Reúne várias saídas de func.

B = arrayfun(___, 'UniformOutput', false)

Retorna um cell array para que os resultados possam ter qualquer tamanho ou tipo.

B = arrayfun(___, 'ErrorHandler', f)

Chama f em vez de parar quando func dá erro em um elemento.

Descrição

arrayfun é um laço disfarçado: não vetoriza o cálculo, mas elimina o controle manual e mantém o resultado com a forma da entrada. É a ferramenta certa quando func não funciona com arrays inteiros, por exemplo quando devolve texto ou vetores por elemento.

Com o UniformOutput padrão, toda chamada deve devolver um escalar da mesma classe; caso contrário há erro. Use cellfun para cell arrays e structfun para os campos de uma struct.

Argumentos de entrada

func
Handle de função com tantos argumentos quanto arrays.
A
Array de qualquer tipo, inclusive arrays de struct.
'UniformOutput'
true (padrão) exige resultados escalares; false permite qualquer coisa e retorna um cell array.
'ErrorHandler'
Handle que recebe uma struct de erro e as entradas; sua saída substitui o resultado que faltou.

Argumentos de saída

B
Array (ou cell array) com o mesmo tamanho das entradas.

Exemplos

Saída uniforme e em cell

arrayfun(@(x) x^2, 1:4)
c = arrayfun(@(k) k*ones(1, k), 1:3, 'UniformOutput', false)
arrayfun(@(x, y) x + y, [1 2; 3 4], [10 20; 30 40])
Saída
ans = 1×4

     1     4     9    16
c = 1×3 cell

    {[1]}    {[2 2]}    {[3 3 3]}
ans = 2×2

    11    22
    33    44

Várias saídas

[m, i] = arrayfun(@(k) max([k 3 2]), 1:4)
Saída
m = 1×4

     3     3     3     4
i = 1×4

     2     2     1     1

Veja também

cellfun structfun cell2mat bsxfun deal