Rust 如何用Ndaray做生锈的网点产品?
我有一个向量,我用ndarray板条箱把它重塑成2D数组。现在我想用vec列做点积。例如,Rust 如何用Ndaray做生锈的网点产品?,rust,Rust,我有一个向量,我用ndarray板条箱把它重塑成2D数组。现在我想用vec列做点积。例如, use ndarray::*; pub fn main() { let vec1 = //Read from file let vec2 = //Read from file let mat = Array2::from_shape_vec((row, cols), vec1).unwrap(); let final_mat = mat.dot(&vec2);
use ndarray::*;
pub fn main() {
let vec1 = //Read from file
let vec2 = //Read from file
let mat = Array2::from_shape_vec((row, cols), vec1).unwrap();
let final_mat = mat.dot(&vec2);
}
我得到下面的错误
the trait `ndarray::linalg::impl_linalg::Dot<std::vec::Vec<f32>>` is not implemented for
`ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<i16>, ndarray::dimension::dim::Dim<[usize; 2]>>`
trait`ndarray::linalg::impl_linalg::Dot`未为实现
`ndarray::ArrayBase`
错误包含您所需的所有信息:traitDot
,它表示调用带有&Vec
类型参数的.Dot()
方法的能力,而不是为数组2
实现
您需要将vec2
转换为T
类型,Array2
为其实现Dot
根据报告:
阵列基的impl点,其中
S:数据,
S2:数据,
A:好的,
这意味着,随着花式类型的简化,Array2
实现了Dot
。这也意味着两个数组的元素类型需要相同,但目前vec1
由i16
s组成,vec2
由f32
s组成
解决方案:将vec2
转换为Array1
,并使vec1
f32
s的元素
使用ndarray::{Array1,Array2};
fn main(){
让vec1=//从文件读取,将i16s转换为f32s
让vec2=//从文件中读取
设mat=Array2::from_shape_vec((行,列),vec1).unwrap();
设col_vec=Array1::from(vec2);
让最终材料=材料点(&col\u vec);
}
非常感谢:)消息太大,因此我无法理解