Как добавить целое число к фрагменту из Rust ndarray?

#rust #rust-ndarray

#Ржавчина #rust-ndarray

Вопрос:

Позвольте мне попробовать:

 let mut a: Array2<usize> = Array2::zeros((20, 20));
let z = a.slice(s![.., 1]);
z  = 1;
 

что дает:

 error[E0368]: binary assignment operation ` =` cannot be applied to type `ArrayBase<ViewRepr<amp;usize>, _>`
 

Комментарии:

1. github.com/rust-ndarray/ndarray/issues/1090

Ответ №1:

Если вы используете u64 вместо usize , у вас все получится. Смотрите следующий пример:

 use ndarray::{s, Array2};

pub fn foo() -> Array2<u64> {
    let mut a: Array2<u64> = Array2::zeros((20, 20));
    let z = a.slice(s![.., 1]);
    z  = 1;
    z
}

pub fn bar() -> Array2<usize> {
    let mut a: Array2<usize> = Array2::zeros((20, 20));
    let z = a.slice(s![.., 1]);
    z  = 1; // NOTE: Fails!
    z
}
 

Ссылка на Rust playground в этом фрагменте

Это потому, что ndarray не реализовал Add признак для usize типа. Это реализовано для i32 , u32 , и любых других целочисленных типов фиксированного размера.

Обновление: я отправил PR, чтобы исправить эту проблему, и она была объединена.

Ссылки
  • <a rel=»noreferrer noopener nofollow» href=»https://docs.rs/ndarray/0.12.1/ndarray/struct.ArrayBase.html#impl-Add<ArrayBase>» rel=»nofollow noreferrer»>https://docs.rs/ndarray/0.12.1/ndarray/struct .ArrayBase.html#impl-Добавить<ArrayBase>
  • https://github.com/rust-ndarray/ndarray/pull/1128

Комментарии:

1. ОК. Это невероятно произвольно?

2. @Alper На самом деле я только что сделал для вас пиар github.com/rust-ndarray/ndarray/pull/1128

3. @Alper Отправленный мной PR был объединен, и это будет исправлено в следующем выпуске ndarray.