Rust:使用 ndarray-linalg 和 ndarray crates 的问题

Rust: problem using ndarray-linalg & ndarray crates

我正在用 Rust 编写一个交叉编译库(可以在 IOS/Android/Linux/MacOS 上运行)。我正在使用 ndarray 来实现算法。

我需要计算 ArrayBase 的范数。我发现 ndarray-linalg 这是一个在 ndarray 的类型上实现了很多特征的板条箱。

但是我无法使用它:

// Cargo.toml
ndarray = { version = "0.15.1", default-features = true } 
ndarray-linalg = {version = "0.13.1"}

// src/main.rs
use ndarray::*;
use ndarray_linalg::*;

fn main() {
    let foo = ArrayBase::from(&[1,2,3]);
    foo.norm_l2(); // produces error
      //^^^^^^^ method not found in `&ArrayBase<OwnedRepr<f64>, Dim<[usize; 1]>>`
}

所以我有两个问题:

  1. 如何解决这个问题并使这些方法在我的程序中可访问?
  2. 无论如何,使用这些箱子针对 android 和 IOS 架构进行编译是个好主意吗?

提前致谢。

ndarray-linalg 版本 0.13.1 需要 ndarray 版本 0.14。因此,您可以将 ndarray 版本降低到 0.14,在这种情况下您的代码可以工作,或者删除 ndarray-linalg 依赖项。如果您想继续使用 ndarray 0.15.1 并且只需要计算 L2 范数,那么自己在几行中实现它可能是最简单的。

ndarray 0.15 版仅在一周前发布,因此可能很快就会有支持它的 ndarray-linalg 版本。

ndarray-linalg目前只支持x86_64指令集