Rust: проблема с использованием ящиков ndarray-linalg и ndarray

Я пишу кросс-скомпилированную библиотеку на 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]>>`
}

Итак, у меня есть 2 вопроса:

  1. Как решить эту проблему и сделать эти методы доступными в моей программе?
  2. В любом случае, стоит ли использовать эти ящики для компиляции для архитектур Android и IOS?

Заранее спасибо.


person Bashir Abdelwahed    schedule 02.04.2021    source источник


Ответы (1)


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 набор инструкций.

person Ben    schedule 02.04.2021