You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust ndarray数组上高效实现逐元素初等数学运算?

Rust ndarray 初等数学运算实现方案

稳定版可用写法

当前ndarray 0.15.x及更早版本可通过mapv系列方法实现逐元素运算,写法简洁,编译器会自动优化为和手动遍历等效的机器码,无额外性能损耗:

非原地运算(返回新数组)

extern crate ndarray;

use ndarray as nd;
use ndarray::Array2;

fn main() {
    let matrix = nd::array![[1., 2., 3.], [9., 8., 7.]];
    let result = some_math(matrix);
    println!("{}", result)
}

fn some_math(mat: Array2<f64>) -> Array2<f64> {
    // 链式调用实现逐元素exp、sqrt,逻辑和numpy的np.sqrt(np.exp(matrix))完全对齐
    mat.mapv(f64::exp)
       .mapv(f64::sqrt)
}

原地运算(节省内存)

如果不需要保留原始数组,可以用mapv_inplace原地修改,避免额外的数组内存分配:

fn some_math(mut mat: Array2<f64>) -> Array2<f64> {
    mat.mapv_inplace(f64::exp);
    mat.mapv_inplace(f64::sqrt);
    mat
}

其他初等函数同理,直接替换mapv传入的方法即可,比如:

  • sin运算:mat.mapv(f64::sin)
  • 自然对数运算:mat.mapv(f64::ln)
  • 常用对数运算:mat.mapv(f64::log10)

后续版本简化写法

目前ndarray有正在评审的功能更新,合并后可以直接通过链式方法调用实现相同需求,写法为matrix.exp().sqrt(),和numpy的使用体验一致,相关用法也已在官方文档的numpy用户迁移指南中有所说明。

内容的提问来源于stack exchange,提问作者null

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:27:02