gpt4 book ai didi

multidimensional-array - 如何在 &ndarray::Array1 和 &mut Array1 之间做减法?

转载 作者:行者123 更新时间:2023-11-29 08:25:08 25 4
gpt4 key购买 nike

我发现不可能使用 ndarray crate 在不可变数组引用和可变数组引用之间进行减法运算:

#[macro_use]
extern crate ndarray;

use ndarray::Array1;

fn main() {
let a: &Array1<f64> = &array![3.0, 2.0, 1.0];
let b: &mut Array1<f64> = &mut array![1.0, 1.0, 1.0];
let c = a - &b.view(); // This compiles
let d = a - b; // This fails to compile
}

我得到的错误信息是:

let d = a - b;
^ no implementation for `f64 - &mut ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 1]>>`

我不明白这两种类型是什么意思,但是有什么特殊的原因没有实现这个吗?

最佳答案

Sub trait in ndarray::ArrayBase 未针对 &mut 实现参数(用于对其他数组的不可变引用)。不需要它,因为不应修改右手值。第二个操作数是 &mut Array<A, D> ,它最终成为类型弱化为不可变引用不会自动发生的情况之一。不过,您可以显式地重新借用该值:

let a: &Array1<f64> = &array![3.0, 2.0, 1.0]; 
let b: &mut Array1<f64> = &mut array![1.0, 1.0, 1.0];
let c = a - &b.view();
let d = a - &*b;

这假设ab是在别处获得的。事实上,您可以让这些变量拥有数组:

let a: Array1<f64> = array![3.0, 2.0, 1.0]; 
let mut b: Array1<f64> = array![1.0, 1.0, 1.0];
let c = &a - &b.view();
let d = &a - &b;

关于multidimensional-array - 如何在 &ndarray::Array1<f64> 和 &mut Array1<f64> 之间做减法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431134/

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