首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何在rust-ndarray中对数组进行算术运算?

我们如何在rust-ndarray中对数组进行算术运算?
EN

Stack Overflow用户
提问于 2020-10-20 12:57:00
回答 1查看 90关注 0票数 0

我正在自学rust-ndarray,并编写了这个简单的代码。

代码语言:javascript
复制
use ndarray::prelude::*; 

fn main() {
    let mut a = Array2::<f64>::ones((3, 3));
    let b = (a*(a-0.5))*(a+2.0);
    println!("{:?}",b);

}

我预计输出结果是

代码语言:javascript
复制
  [[ 1.5,  1.5,  1.5],
   [ 1.5,  1.5,  1.5],
   [ 1.5,  1.5,  1.5]]

但是它给出了这个错误

代码语言:javascript
复制
    |     let b = (a*(a-0.5))*(a+2.0);
    |                -------   ^ value used here after move
    |                |
    |                `a` moved due to usage in operator
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 15:05:34

运算符通过值获取其参数。这允许进行优化,例如,如果在操作后不再需要输入,则对输出重用相同的内存。在ndarray中,加法也是implemented for references的,所以你可以简单地借用操作数来告诉编译器你想在以后继续使用它们。然而,乘法只对拥有的值实现(我不知道为什么),所以您需要克隆a或在两行中执行操作,以便可以在第二行中移动a

代码语言:javascript
复制
let b = a.clone() * (&a-0.5) * (&a+2.0);

Playground

代码语言:javascript
复制
let b = (&a-0.5) * (&a+2.0);
let b = a * b;
// Can't use a from now on

Playground

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64438708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档