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;falsepermite 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])
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)
m = 1×4
3 3 3 4
i = 1×4
2 2 1 1