gpt4 book ai didi

parallel-processing - 使用 ndarray_parallel Zip 遍历 Array2 的行和 Array1 的项目

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

我想并行遍历 Array2 的行和 Array1 的项目,并对它们进行一些带有副作用的计算。

我试过类似下面的东西,

extern crate ndarray;
extern crate ndarray_parallel;

use ndarray::{Array2, Array, Zip, Axis};
use ndarray_parallel::prelude::*;

fn main() {
let mut a = Array2::<f64>::zeros((5, 5));
let b = Array::from_iter(0..5);
let c = vec![1,2,3,4,5];
let mut d = vec![1,2,3,4,5];

let z = Zip::from(a.axis_iter(Axis(0))).and(&b);
z.par_apply(|x,y| {d[*y as usize] = 10});
}

但是编译器在提示。

谁能给个建议?

最佳答案

您的代码中存在多个误解,如果以下任何内容不是您想要的,请纠正我:

  • b 似乎充当向量的索引。您可以使用 Zip::indexed 直接与元素一起生成索引,无需显式索引数组。
  • axis_iter 返回一个遍历底层 ndarray 的所有轴的迭代器。您可能希望 index_axis 遍历其中之一。
  • 您的数组包含整数和 float 。在 rust 中,您不能在两者之间应用算术运算。
  • par_apply 采用 Fn,因此它不能改变捕获的变量。

综合考虑,代码可能应该是这样的:

use ndarray::{Array2, Zip, Axis};
use ndarray_parallel::prelude::*;

fn main() {
let a = Array2::<f64>::zeros((5, 5));
let mut d = vec![1.,2.,3.,4.,5.];

Zip::indexed(a.index_axis(Axis(0), 0))
.and(&mut d)
.par_apply(|_i, x, y| *y = x + 10.);
}

关于parallel-processing - 使用 ndarray_parallel Zip 遍历 Array2 的行和 Array1 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58046436/

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