Rust f64未实现RawData
我试图使用ndarray来计算点积,但得到了我不理解的编译错误 我的基本功能是Rust f64未实现RawData,rust,Rust,我试图使用ndarray来计算点积,但得到了我不理解的编译错误 我的基本功能是 使用ndarray::{ArrayD,ArrayBase}; 发布fn余弦(v1:&ArrayBase,v2:&ArrayBase)->f64{ 设x:f64=v1.dot(&v2)/(v1.dot(v1)*v2.dot(v2)).sqrt(); 返回x } 发布fn cosine2(v1:&ArrayD,v2:&ArrayD)->f64{ 设x:f64=v1.dot(v2)/(v1.dot(v1)*v2.dot(v
使用ndarray::{ArrayD,ArrayBase};
发布fn余弦(v1:&ArrayBase,v2:&ArrayBase)->f64{
设x:f64=v1.dot(&v2)/(v1.dot(v1)*v2.dot(v2)).sqrt();
返回x
}
发布fn cosine2(v1:&ArrayD,v2:&ArrayD)->f64{
设x:f64=v1.dot(v2)/(v1.dot(v1)*v2.dot(v2)).sqrt();
返回x
}
未能编译:
error[E0277]:特性绑定'f64:ndarray::data_traits::RawData'不满足DchGraph
-->src/simple.rs:3:1
|
3 |/pub fn余弦(v1:&ArrayBase,v2:&ArrayBase)->f64{
设x:f64=v1.dot(&v2)/(v1.dot(v1)*v2.dot(v2)).sqrt();
5 | | }
|| ^没有为`f64'实现trait`ndarray::data`traits::RawData``
|
=注意:`ndarray::ArrayBase需要`
如果我注释掉余弦,我会从余弦2中得到一个错误:
error[E0599]:在当前作用域中找不到用于引用“%ndarray::ArrayBase”的名为“dot”的方法
-->src/simple.rs:9:21
|
9 |设x:f64=v1.dot(v2)/(v1.dot(v1)*v2.dot(v2)).sqrt();
|在`&ndarray::ArrayBase中找不到^^^^方法`
(其他dot产品还有两份副本)。为什么第二个版本找不到方法?似乎ArrayD
是一种基于Array
的类型,而数组又是一种基于ArrayBase
的类型,因此ArrayD::dot
应该是一种现有的方法
我只需要能够通过一个ArrayD
,所以我很高兴这两个版本都可以
my Cargo.toml的相关部分是
[dependencies.ndarray]
version = "0.13.1"
[features]
default = ["ndarray/blas"]
首先,
ArrayBase
的数据类型不是由数据类型索引的,而是数据类型的RawData
包装。其次,dot
需要实现dot
特性。因此,您应该将这两项添加到特征边界:
使用ndarray::linalg::Dot;
使用ndarray::{ArrayBase,ArrayD,RawData};
发布fn余弦(v1:&ArrayBase,v2:&ArrayBase)->f64
哪里
D:原始数据,
ArrayBase:Dot,
{
设x:f64=v1.dot(&v2)/(v1.dot(v1)*v2.dot(v2)).sqrt();
返回x;
}