You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ndarray的map_inplace/par_map_inplace操作中利用当前元素的索引?

在ndarray的map_inplace/par_map_inplace中使用元素索引的方法

map_inplace 和 par_map_inplace 的闭包仅接收元素的可变引用,无法直接获取索引。要在映射过程中使用索引,推荐直接使用带索引的迭代器方法,而非依赖全局计数器(并行场景下全局计数器会引发竞争问题,完全不可靠)。

非并行场景(替代map_inplace)

使用 indexed_iter_mut 遍历,同时获取元素的索引和可变引用:

use ndarray::Array2;

let mut array = Array2::from_shape_vec((2, 2), vec![1, 2, 3, 4]).unwrap();

array.indexed_iter_mut().for_each(|((row, col), val)| {
    *val = row * 10 + col; // 直接使用索引计算新值
});

并行场景(替代par_map_inplace)

需要引入 ndarray-parallel crate,使用 par_indexed_iter_mut 实现安全的并行遍历并获取索引:

use ndarray::Array2;
use ndarray_parallel::prelude::*;

let mut array = Array2::from_shape_vec((2, 2), vec![1, 2, 3, 4]).unwrap();

array.par_indexed_iter_mut().for_each(|((row, col), val)| {
    *val = row * 10 + col; // 并行环境下安全使用索引
});

注:如果一定要保留类似 map_inplace 的写法,本质也是基于上述迭代器封装,但直接使用带索引的迭代器更直观高效。

内容的提问来源于stack exchange,提问作者Test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:45:59