gpt4 book ai didi

multidimensional-array - Rust:切片上的ndarray点乘积的 “multiple applicable items in scope”错误

转载 作者:行者123 更新时间:2023-12-03 11:39:52 25 4
gpt4 key购买 nike

我想我最终在问这个问题时想出了一个解决方案,但我还是想把这个问题留给我...

我正在使用ndarray crate 处理n维矩阵,我需要获取多个不连续切片的点积。但是,我遇到了一个问题,因为在获取点积时,编译器似乎无法弄清楚我的切片是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]>>`

如何提供必要的信息?

最佳答案

尽管错误消息引用了ArrayBase,但这里的重要信息实际上是切片的尺寸。因此,使用ArrayView提供明确的尺寸就可以了:

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: ArrayView<_, Ix1> = a.slice(s![0, ..]);
let b_slice: ArrayView<_, Ix1> = b.slice(s![0, ..]);

println!("{:?}", &a_slice.dot(&b_slice));

}

关于multidimensional-array - Rust:切片上的ndarray点乘积的 “multiple applicable items in scope”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com