楼层: 首页/ 软件技术/ Rust + AI 全栈/ 数据处理:ndarray 与 polars
03

数据处理:ndarray 与 polars

ndarray & polars · NumPy & Pandas in Rust

AI 项目 80% 的时间在洗数据。Python 用 NumPy 和 Pandas,Rust 对应物是 ndarray(多维数组,对标 NumPy)和 polars(DataFrame,对标 Pandas,但快 10 倍、省内存一半)。

ndarray:Rust 的 NumPy

use ndarray::{Array2, Array3, arr2, Array}; // 创建矩阵 let mut a = Array2::<f32>::zeros((3, 3)); a[[0, 0]] = 1.0; // 从向量构造 let b = arr2(&[ [1., 2., 3.], [4., 5., 6.], ]); // 矩阵乘法(@ 运算符) let c = a.dot(&b.t().unwrap()); // 广播 + 逐元素运算 let d = &b * 2.0 + 1.0; // 线性代数:SVD / 特征值 / 逆矩阵(需要 ndarray-linalg) // use ndarray_linalg::Solve;

polars:Rust 的 Pandas

论为什么 polars 比 Pandas 快

Pandas 是单线程的,polars 用 Rust 写,底层用 Arrow 列式存储,默认多线程并行。同样一份 CSV,polars 读进来快 5-10 倍,内存占用一半。而且 polars 有 Lazy API——你先描述要做什么操作,polars 做查询优化(类似数据库优化器),最后一次性执行。

use polars::prelude::*; // 读 CSV let mut df = CsvReadOptions::default() .try_into_reader_with_file_path(Some("data.csv".into()))? .finish()?; // 列选择 / 过滤 / 排序 let out = df .select(["name", "age", "score"])? .filter(&df.column("age")?.gt(18)?)? .sort(["score"], false)?; // 分组聚合:groupby + agg let stats = df .group_by(["city"])? .agg([ col("age").mean(), col("score").max(), ])?; // Lazy API:查询优化器自动下推过滤 let lf = LazyCsvReader::new("big.csv").finish()? .filter(col("age").gt(18)) .select([col("name"), col("score")]); let df = lf.collect()?;

tokenizers:Hugging Face 的 Rust 分词器

Hugging Face 官方用 Rust 重写的分词器,Python 版就是它的 binding。BPE、WordPiece、Unigram 全支持,加载预训练 tokenizer 一行代码。大模型推理必备——模型只认 token id,不认字。

use tokenizers::Tokenizer; let tok = Tokenizer::from_pretrained("Qwen/Qwen2-0.5B-Instruct", true)?; let enc = tok.encode("你好,世界", true)?; println!("token ids: {:?}", enc.get_ids()); let text = tok.decode(enc.get_ids(), true)?;

统计计算基础

AI 数据处理经常要算均值、方差、分位数、相关性。ndarray 自带 .mean()、.var(),高级统计用 statistical crate。

use ndarray::Array1; let data = Array1::<f64>::linspace(0., 100., 1000); let mean = data.mean().unwrap(); let std = data.std(0.); let median = statistical::median(data.as_slice().unwrap()); let q75 = statistical::percentile(data.as_slice().unwrap(), 75.);
记
本章小结

① ndarray 对标 NumPy,polars 对标 Pandas(多线程 + Lazy API,更快更省)。

② tokenizers 加载 Hugging Face 预训练分词器,大模型推理必备。