这是一种保证分配到相同索引组中最后一个索引的方法 -
# Get sorting indices for index keeping the order with 'mergesort' option
sidx = index.argsort(kind='mergesort')
# Get sorted index array
sindex = index[sidx]
# Get the last indices from each group of identical indices in sorted version
idx = sidx[np.r_[np.flatnonzero(sindex[1:] != sindex[:-1]), index.size-1]]
# Use those last group indices to select indices off index and b to assign
a[index[idx]] = b[idx]
样本运行 -
In [141]: a
Out[141]: array([0, 1, 2, 3, 4])
In [142]: index
Out[142]: array([1, 2, 3, 1, 2, 1, 2, 3, 4, 2])
In [143]: b
Out[143]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [144]: sidx = index.argsort(kind='mergesort')
...: sindex = index[sidx]
...: idx = sidx[np.r_[np.flatnonzero(sindex[1:] != sindex[:-1]), index.size-1]]
...: a[index[idx]] = b[idx]
...:
In [145]: a
Out[145]: array([0, 5, 9, 7, 8])