Closed
Description
Dot product is only a valid call for ndarray::Array2 -- even if the ArrayD is of the same dimensions.
use ndarray::prelude::*;
fn main() {
let mat1 = Array2::from_shape_vec((3, 2), vec![3.0; 6]).unwrap();
let mat2 = Array2::from_shape_vec((2, 3), vec![1.0; 6]).unwrap();
let dot = mat1.dot(&mat2);
}
works, while
use ndarray::prelude::*;
fn main() {
let mat1 = ArrayD::from_shape_vec(vec![3, 2], vec![3.0; 6]).unwrap();
let mat2 = ArrayD::from_shape_vec(vec![2, 3], vec![1.0; 6]).unwrap();
let dot = mat1.dot(&mat2);
}
does not
This results in a very opaque compiler error:
overflow evaluating the requirement `&ArrayBase<_, _>: Not`
consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`ndarray-issue`)
required for `&ArrayBase<_, _>` to implement `Not`
127 redundant requirements hidden
required for `&ArrayBase<OwnedRepr<{float}>, Dim<IxDynImpl>>` to implement `Not`
In my opinion this should either give a clearer error message or be a valid call. I am not experienced enough with rust at the moment to suggest a fix myself.