我有一个数组我湾用于映射。让我们把它叫做my_map
,浮点型形状(M,C)。
我有索引的第二阵列,以免称之为my_indexes
,int类型尺寸(N,C),每一个值是0和m之间。
试图索引my_map
做my_ans = my_map[my_indexes]
我得到形状的阵列(N,C,c)中,当我期待(N,C)。什么是正确的方式做到这一点?
只是要清楚,我所要做的是东西相当于:
my_ans = np.empty_like(touch_probability)
for i in range(c):
my_ans[:,i] = my_map[:,i][my_indexes[:,i]]
为了说明和测试您的问题,定义简单,真正的数组:
In [44]: arr = np.arange(12).reshape(3,4)
In [45]: idx = np.array([[0,2,1,0],[2,2,1,0]])
In [46]: arr.shape
Out[46]: (3, 4)
In [47]: idx.shape
Out[47]: (2, 4)
你期望的计算:
In [48]: res = np.zeros((2,4), int)
In [49]: for i in range(4):
...: res[:,i] = arr[:,i][idx[:,i]] # same as arr[idx[:,i], i]
...:
In [50]: res
Out[50]:
array([[0, 9, 6, 3],
[8, 9, 6, 3]])
做同样的一个换位步骤:
In [51]: arr[idx, np.arange(4)]
Out[51]:
array([[0, 9, 6, 3],
[8, 9, 6, 3]])
这是广电两个数组索引彼此,然后采摘点:
In [52]: np.broadcast_arrays(idx, np.arange(4))
Out[52]:
[array([[0, 2, 1, 0],
[2, 2, 1, 0]]),
array([[0, 1, 2, 3],
[0, 1, 2, 3]])]
因此,我们索引(M,C)阵列2(N,C)阵列
以下是一样的:
ARR [IDX] ARR [IDX,:]
它使用idx
选择从arr
整个行,所以结果是idx
的外形加上arr
的最后一个维度。凡为你想要的仅仅是ith
行的idx[j,i]
元素。