如何并行枚举Rust ndarray数组?
如何并行枚举Rust ndarray数组?
我懂你现在的困扰——想用ndarray进行并行遍历,同时获取元素的索引和值,但par_iter和par_iter_mut这两个并行迭代器方法没法直接调用enumerate(),对吧?
你当前使用的depth.indexed_iter_mut().par_bridge()其实是一种可行的方案,但确实有更直接的官方API可以用:ndarray提供了专门的并行索引迭代器方法:par_indexed_iter(不可变)和par_indexed_iter_mut(可变)。
这两个方法会直接返回带有索引的并行迭代器,不需要再通过par_bridge去转换普通迭代器。比如你原来的代码可以直接替换成:
depth.par_indexed_iter_mut()
这样就能直接并行遍历数组,同时拿到每个元素的索引和可变引用,用法和indexed_iter_mut完全类似,但内部是基于rayon实现的并行处理。
至于为什么par_iter不能用enumerate(),是因为par_iter返回的是rayon的并行迭代器类型,而标准库的enumerate()方法只适用于普通的顺序迭代器,并行迭代器并没有这个方法。而ndarray提供的par_indexed_iter系列方法刚好封装了这个需求,帮你省去了手动转换的步骤。
备注:内容来源于stack exchange,提问作者Da1sy petals
相关产品推荐
相关产品推荐

