如何用Numpy二维数组的值作为索引查询一维数组?
Numpy实现二维数组索引映射一维数组的无循环方案
直接利用Numpy的整数数组索引特性就能实现,核心是注意Numpy的索引是从0开始的,而你的二维数组元素是1-based的索引值(1对应一维数组第一个元素),所以需要先做偏移处理,具体步骤如下:
代码示例
import numpy as np # 定义你的二维数组 arr_2d = np.array([[3, 3, 3, 2], [1, 5, 2, 3], [4, 2, 3, 2], [2, 3, 1, 3]]) # 定义一维数组(用具体值演示,对应x=10, y=20, z=30, q=40, p=50) arr_1d = np.array([10, 20, 30, 40, 50]) # 核心操作:二维数组元素减1转为0-based索引,再索引一维数组 result = arr_1d[arr_2d - 1] print(result)
输出结果
array([[30, 30, 30, 20], [10, 50, 20, 30], [40, 20, 30, 20], [20, 30, 10, 30]])
原理说明
- Numpy允许直接用任意形状的整数数组作为索引,返回的数组形状和索引数组(这里是
arr_2d - 1)完全一致 - 因为你的二维数组中1对应一维数组的第一个元素x(即
arr_1d[0]),所以必须将二维数组的每个元素减1,把1-based的索引转为Numpy要求的0-based索引
内容的提问来源于stack exchange,提问作者Mykenk
相关产品推荐
相关产品推荐

