numpy通过索引获取数组中的值

1 投票
2 回答
1711 浏览
提问于 2025-05-10 15:08

我有一个包含数组的数组的数组:

arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2 = np.array([[10,20,30],[40,50,60],[70,80,90]])
arr3 = np.array([[15,25,35],[45,55,65],[75,85,95]])

list_arr = np.array([arr1,arr2,arr3])

还有一个索引数组:

indices_array = np.array([1,0,2])

我想要获取第一个(数组的数组)中索引为 1 的数组,第二个(数组的数组)中索引为 0 的数组,以及第三个(数组的数组)中索引为 2 的数组。

期望的输出是:

#[[ 4  5  6]
#[10 20 30]
#[75 85 95]]

我想用 numpy 的方法来实现这个,因为我的数组很大,所以我更倾向于不使用列表推导式。

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

0

只需要通过将位置链接到想要的索引(0-1, 1-0, 2-2)来访问,具体方法如下:

desired_array = np.array([list_arrr[x][y] for x,y in enumerate([1,0,2])])
3

基本上,你是在选择第二个轴上的元素,这些元素的索引是通过indices_array来对应第一个轴上每个位置的,同时适用于第三个轴上的所有元素。因此,你可以这样做 -

list_arr[np.arange(list_arr.shape[0]),indices_array,:]

示例运行 -

In [16]: list_arr
Out[16]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[10, 20, 30],
        [40, 50, 60],
        [70, 80, 90]],

       [[15, 25, 35],
        [45, 55, 65],
        [75, 85, 95]]])

In [17]: indices_array
Out[17]: array([1, 0, 2])

In [18]: list_arr[np.arange(list_arr.shape[0]),indices_array,:]
Out[18]: 
array([[ 4,  5,  6],
       [10, 20, 30],
       [75, 85, 95]])

撰写回答