ndarray für Rust: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

ndarray für Rust: Vollständige Anleitung für N-dimensionale Arrays

1. Was ist ndarray und warum braucht man es?

Die Bibliothek ndarray ist die Standarderweiterung im Rust-Ökosystem für die Arbeit mit mehrdimensionalen Arrays (N-dimensionalen Tensoren). Sie bietet leistungsstarke, typsichere und effiziente Datenstrukturen für numerische Berechnungen, lineare Algebra, Signalverarbeitung, maschinelles Lernen und wissenschaftliche Berechnungen. Wenn Sie mit NumPy in Python vertraut sind, ist ndarray das direkte Pendant in der Rust-Welt – mit den Vorteilen strenger Typisierung, fehlendem Garbage Collector und voller Speicherkontrolle.

Warum wird es benötigt? Rust hat keine eingebaute Unterstützung für mehrdimensionale Arrays mit einer beliebigen Anzahl von Achsen. Standard-Vektoren (Vec<T>) und Slices (&[T]) erlauben nur die Arbeit mit eindimensionalen Daten. Für Aufgaben, die Matrixalgebra, Faltungen, Tensoroperationen oder Bildverarbeitung erfordern, ist eine spezialisierte Bibliothek notwendig. ndarray löst diese Probleme und bietet:

  • Typisierte N-dimensionale Arrays (ArrayBase) mit fester oder dynamischer Achsenanzahl.
  • Effizientes Slicing, Indizierung und Iteration.
  • Vektorisierte arithmetische Operationen (Broadcasting).
  • Integration mit BLAS/LAPACK über ndarray-linalg für hochperformante lineare Algebra.
  • Unterstützung für parallele Berechnungen via rayon.

Die Bibliothek wird aktiv in Projekten wie RustML, Linfa (Machine-Learning-Framework), Image (Bildverarbeitung) und vielen anderen eingesetzt. Sie ist das Fundament für wissenschaftliches Rechnen in Rust.

2. Installation

Für die Installation von ndarray verwenden Sie den Paketmanager Cargo, der Teil von Rust ist. Fügen Sie die Abhängigkeit in Ihre Cargo.toml-Datei ein:

[dependencies]
ndarray = "0.16"

Führen Sie dann folgenden Befehl im Terminal aus:

cargo build

Für lineare Algebra (Matrixmultiplikation, Eigenwerte) fügen Sie ndarray-linalg hinzu und wählen ein BLAS-Backend (z.B. OpenBLAS oder Intel MKL):

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

Für parallele Iterationen verwenden Sie ndarray-parallel:

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

3. Schnellstart – Minimales Beispiel

Wir erstellen ein eindimensionales Array, führen eine elementweise Addition durch und geben das Ergebnis aus. Speichern Sie folgenden Code in src/main.rs:

use ndarray::Array;

fn main() {
    // Eindimensionales Array mit 5 Elementen erstellen
    let a = Array::from_vec(vec![1, 2, 3, 4, 5]);
    let b = Array::from_vec(vec![10, 20, 30, 40, 50]);

    // Elementweise Addition
    let c = &a + &b;

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

Starten Sie das Programm:

cargo run

Ausgabe:

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. Wichtige Methoden und Funktionen (mindestens 8)

4.1. Array::from_shape_vec

Signatur: pub f

Empfehlungen