Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust f64未实现RawData_Rust - Fatal编程技术网

Rust f64未实现RawData

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来计算点积,但得到了我不理解的编译错误

我的基本功能是

使用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;
}