gpt4 book ai didi

multidimensional-array - ndarray-尝试将impl AddAssign 用于ArrayBase会导致编译器错误

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

我正在使用ndarray crate (0.13.1版本)进行矢量和矩阵运算,遇到一个错误,我想找到一个解释(和解决方案)。
注意以下代码:

use ndarray as nd;
fn main() {
let mut matrix: nd::Array2<f64> = nd::Array::zeros((3, 4));
let additional: nd::Array2<f64> = nd::Array::ones((3, 4));
matrix += additional; // <- Compiler error
}
我假设此代码可以编译并正确运行,因为 AddAssign<ndarray::ArrayBase是为 ndarray::ArrayBase( see documentation)实现的,并且形状匹配。正确的...?
不。
我在同一行(第三行)中遇到两个编译器错误(请参阅问题底部)。
我对这些错误的拙劣解释是,编译器似乎没有注意到 AddAssign<BaseArray>BaseArray实现-它只考虑了 AddAssign<B> where B: ScalarOperand(当然,正确的 here也已记录在案)。
我想知道我的代码是否与 AddAssign<BaseArray>实现不匹配,如果匹配,还有什么问题?
这也使我感到好奇,编译器期望 f64作为 +=操作的rhs-是什么可能导致它完全忽略 BaseArray实际上在此位置是期望的事实?
任何帮助将不胜感激。
提前致谢!
错误:
error[E0271]: type mismatch resolving `<ndarray::data_repr::OwnedRepr<f64> as ndarray::data_traits::RawData>::Elem == ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<f64>, ndarray::dimension::dim::Dim<[usize; 2]>>`
--> src\main.rs:11:12
|
11 | matrix += additional;
| ^^ expected `f64`, found struct `ndarray::ArrayBase`
|
= note: expected type `f64`
found struct `ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<f64>, ndarray::dimension::dim::Dim<[usize; 2]>>`
= note: required because of the requirements on the impl of `std::ops::AddAssign` for `ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<f64>, ndarray::dimension::dim::Dim<[usize; 2]>>`

error[E0277]: the trait bound `ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<f64>, ndarray::dimension::dim::Dim<[usize; 2]>>: ndarray::impl_ops::ScalarOperand` is not satisfied
--> src\main.rs:11:12
|
11 | matrix += additional;
| ^^ the trait `ndarray::impl_ops::ScalarOperand` is not implemented for `ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<f64>, ndarray::dimension::dim::Dim<[usize; 2]>>`
|
= note: required because of the requirements on the impl of `std::ops::AddAssign` for `ndarray::ArrayBase<ndarray::data_repr::OwnedRepr<f64>, ndarray::dimension::dim::Dim<[usize; 2]>>`

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0271, E0277.
For more information about an error, try `rustc --explain E0271`.

最佳答案

没有为AddAssign<ArrayBase>实现ArrayBase(为简洁起见,省略了类型参数)。但是有an implementation for AddAssign<&ArrayBase>
Auto-deref规则有时使您感觉可以互换使用引用或值,但是这种机制并未扩展到trait实现或类型参数,因此您在这里需要更加明确。
您可以通过引用传递来修复代码:

matrix += &additional;
错误消息是正确的,但是通过谈论 AddAssign<f64>的实现将您引向错误的方向。在此示例中,如果编译器团队可以找到改进它的方法,那么值得使用 logging an issue

关于multidimensional-array - ndarray-尝试将impl AddAssign <ArrayBase>用于ArrayBase会导致编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62815409/

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