我有一个数组数组的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]]
我正在寻找一种简单的方法来做到这一点。因为我有大型数组,所以我不想使用理解列表。
答案 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])])