Я думаю, что я в конечном итоге придумал решение, задавая этот вопрос, но решил, что все равно оставлю вопрос ...
Я работаю с n-мерными матрицами, используя ящик ndarray
и Мне нужно взять точечные продукты из нескольких несмежных срезов. Однако я столкнулся с проблемой, поскольку компилятор не может понять, являются ли мои срезы 1D или 2D, когда дело доходит до точечного продукта, и я не уверен, как указать эту информацию.
Вот упрощенный пример:
use ndarray::prelude::*;
fn main() {
let a = array![[1, 2, 3], [1, 2, 3]];
println!("{:?}", &a);
let b = array![[1, 2, 3], [1, 2, 3]];
println!("{:?}", &b);
let a_slice = a.slice(s![0, ..]);
let b_slice = b.slice(s![0, ..]);
println!("{:?}", &a_slice.dot(&b_slice));
}
Сообщение об ошибке немного сбивает с толку, и я не знаю, как заставить точечный продукт использовать правильного кандидата с учетом задействованных абстрактных структур:
error[E0034]: multiple applicable items in scope
--> src/main.rs:14:31
|
14 | println!("{:?}", &a_slice.dot(&b_slice));
| ^^^ multiple `dot` found
|
= note: candidate #1 is defined in an impl for the type `ndarray::ArrayBase<_, ndarray::dimension::dim::Dim<[usize; 1]>>`
= note: candidate #2 is defined in an impl for the type `ndarray::ArrayBase<_, ndarray::dimension::dim::Dim<[usize; 2]>>`
Как мне предоставить необходимую информацию?