如何通过numpy数组元素值从列表对应索引取值生成新数组
错误原因分析
- 第一种写法
np_array[indices_list]的逻辑是用indices_list里的元素作为下标取np_array第0轴的元素,你的np_array第0轴长度只有2,indices_list里的7、8、9远大于最大下标1,自然触发越界错误,和你要的映射逻辑完全不符。 - 第二种写法
indices_list[np_array]的问题是Python原生列表不支持用numpy多维数组作为下标取值,只接受整数、切片等基础索引类型,所以会报类型错误。
正确实现
numpy数组本身支持高级索引,你只需要先把Python列表转成numpy数组,再用原numpy数组作为下标取值即可,示例代码如下:
import numpy as np # 原始数据 np_array = np.array([[1, 1, 2], [2, 1, 2]]) indices_list = [7,8,9] # 核心实现 np_array_expected = np.array(indices_list)[np_array]
运行后输出结果和你预期一致:
array([[8, 8, 9], [9, 8, 9]])
内容的提问来源于stack exchange,提问作者mf395
相关产品推荐
相关产品推荐

