目前我使用以下低效的解决方法:
depth.indexed_iter_mut().par_bridge()
ndarray
中是否有一个高效的并行迭代器 API 可以生成索引? par_iter
和par_iter_mut
都不是IndexedParallelIterator
的,所以不支持调用enumerate
。
Enumerate 返回一维
usize
索引,但 ndarray::Array
可能具有多个维度。你需要选择一个Axis
来枚举,比如Axis(0)
:
use ndarray::{array, Array2, Axis, parallel::prelude::*};
fn main() {
let mut arr: Array2<f64> = array![[1., 2.], [3., 4.], [5., 6.]];
arr.axis_iter_mut(Axis(0)).into_par_iter().enumerate().for_each(|(i, a)| {
println!("{i} = {a:?}");
});
}
如果要处理所有单个单元格,请考虑顺序迭代某个轴或多个轴,同时并行迭代另一个轴。