ndarray para Rust: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

ndarray para Rust: guia completo para trabalhar com arrays N-dimensionais

1. O que é e para que serve

A biblioteca ndarray é a extensão padrão do ecossistema Rust para trabalhar com arrays multidimensionais (tensores N-dimensionais). Ela fornece estruturas de dados poderosas, type-safe e de alto desempenho para computação numérica, álgebra linear, processamento de sinais, machine learning e cálculos científicos. Se você conhece o NumPy em Python, o ndarray é o equivalente direto no mundo Rust, mas com as vantagens da tipagem forte, ausência de garbage collector e controle sobre a memória.

Para que serve? O Rust não possui suporte nativo a arrays multidimensionais com um número arbitrário de eixos. Vetores padrão (Vec<T>) e slices (&[T]) só permitem trabalhar com dados unidimensionais. Para tarefas que exigem álgebra matricial, convoluções, operações com tensores ou processamento de imagens, é necessária uma biblioteca especializada. O ndarray resolve esses problemas, oferecendo:

  • Arrays N-dimensionais tipados (ArrayBase) com número fixo ou dinâmico de eixos.
  • Slicing eficiente, indexação e iteração.
  • Operações aritméticas vetorizadas (broadcasting).
  • Integração com BLAS/LAPACK via ndarray-linalg para computação linear de alto desempenho.
  • Suporte a computação paralela via rayon.

A biblioteca é amplamente utilizada em projetos como RustML, Linfa (framework de machine learning), Image (processamento de imagens) e muitos outros. Ela é a base para a computação científica em Rust.

2. Instalação

Para instalar o ndarray, use o gerenciador de pacotes Cargo, que já vem com o Rust. Adicione a dependência no arquivo Cargo.toml do seu projeto:

[dependencies]
ndarray = "0.16"

Em seguida, execute o comando no terminal:

cargo build

Para trabalhar com álgebra linear (multiplicação de matrizes, autovalores), adicione ndarray-linalg e escolha um backend BLAS (por exemplo, OpenBLAS ou Intel MKL):

[dependencies]
ndarray = "0.16"
ndarray-linalg = { version = "0.16", features = ["openblas"] }

Para iterações paralelas, use ndarray-parallel:

[dependencies]
ndarray = "0.16"
ndarray-parallel = "0.16"

3. Início rápido — exemplo mínimo funcional

Vamos criar um array unidimensional, fazer uma soma elemento a elemento e exibir o resultado. Salve o código a seguir no arquivo src/main.rs:

use ndarray::Array;

fn main() {
    // Criando um array unidimensional com 5 elementos
    let a = Array::from_vec(vec![1, 2, 3, 4, 5]);
    let b = Array::from_vec(vec![10, 20, 30, 40, 50]);

    // Soma elemento a elemento
    let c = &a + &b;

    println!("a = {:?}", a);
    println!("b = {:?}", b);
    println!("a + b = {:?}", c);
}

Execute o programa:

cargo run

Saída:

a = [1, 2, 3, 4, 5], shape=[5], strides=[1], layout=CFcf (0x1)
b = [10, 20, 30, 40, 50], shape=[5], strides=[1], layout=CFcf (0x1)
a + b = [11, 22, 33, 44, 55], shape=[5], strides=[1], layout=CFcf (0x1)

4. Métodos e funções principais (mínimo de 8)

4.1. Array::from_shape_vec

Assinatura: pub f

Recommendations