#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:
Если вы используете 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.