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

时间:2015-11-19 09:44:54

标签: python arrays numpy

我有一个数组数组的np数组:

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数组:

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

我希望在第一个(数组数组)的索引1处获取数组,数组在 第二个(数组数组)的索引0和第三个(数组数组)索引2的数组

预期产出:

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

我正在寻找一种简单的方法来做到这一点。因为我有大型数组,所以我不想使用理解列表。

2 个答案:

答案 0 :(得分: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]])

答案 1 :(得分:0)

通过将位置链接到所需索引(0-1,1-0,2-2)进行访问,如下所示:

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