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

如何将一维索引映射数组应用于二维索引数组的元素转换?

Numpy索引数组的映射转换实现

问题说明

给定二维Numpy数组arr,其中元素为索引值(-1表示无对应索引),以及二维映射数组trans,trans的第n个元素对应arr中值为n的元素的转换目标值。需要将arr中的元素按trans规则转换,得到目标输出。

输入数据

import numpy as np

# 待转换的二维索引数组
arr = np.array([
   [ 1,  2, -1, -1],
   [ 0,  1, -1, -1],
   [ 3,  5, -1, -1],
   [ 7,  8, -1, -1],
   [ 6,  7, -1, -1],
   [ 9, 11, -1, -1]])

# 映射数组,trans[n][0]对应arr中值为n的转换目标
trans = np.array([[ 0],
   [-1],
   [ 1],
   [-1],
   [ 2],
   [-1],
   [ 3],
   [-1],
   [ 4],
   [-1],
   [ 5],
   [-1]])

解决方案

方法一:掩码筛选+索引映射

# 将二维映射数组转为一维,方便直接索引
trans_flat = trans.flatten()

# 初始化结果数组,保留原arr的结构
result = arr.copy()

# 筛选出arr中需要转换的元素位置(排除-1)
mask = arr != -1

# 对目标位置执行映射转换
result[mask] = trans_flat[arr[mask]]

print(result)

方法二:np.where简洁写法

trans_flat = trans.flatten()
result = np.where(arr == -1, -1, trans_flat[arr])

print(result)

输出结果

array([[-1,  1, -1, -1],
       [ 0, -1, -1, -1],
       [-1, -1, -1, -1],
       [-1,  4, -1, -1],
       [ 3, -1, -1, -1],
       [-1, -1, -1, -1]])

代码解释

  1. 扁平化映射数组:trans.flatten()将二维列向量转为一维数组,使得trans_flat[n]可以直接获取arr中值为n的目标转换值。
  2. 掩码筛选:通过arr != -1定位需要转换的元素,避免对-1执行索引操作(会触发数组越界错误)。
  3. 映射赋值:利用Numpy的向量化索引特性,一次性完成所有目标元素的转换,效率远高于循环遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:38:49