"To location array" 索引数组

"To location array" to index array

我有一些数据数组

a = [6,4,3,1,5]

和一个“定位数组”,它给出了这些元素应该如何重新排列的索引,

b = [4,2,0,1,3]

这意味着:a 的第一个元素应该转到索引 4,a 的第二个元素应该转到索引 2,依此类推。所以当应用 ba 时,我应该得到:

c = [3,1,4,5,6]

但是,我很难实现这个操作。是普通手术吗?如果是这样,有人可以给我举个例子吗?我想从 b 生成一些数组 d 以便

c = a[d]

在上面的例子中,

d = [2,3,1,4,0]

我试过的:d = b[b],但这并不总是正确的。

如果不需要d,可以直接用np.put_along_axis得到c:

>>> a = np.array([6,4,3,1,5])
>>> b = np.array([4,2,0,1,3])

>>> c = np.zeros_like(b)
>>> np.put_along_axis(c, b, a, 0)

>>> c
array([3, 1, 4, 5, 6])

注意操作是就地

我刚刚找到的一种计算d的方法如下:

d = np.zeros(5);
d[b] = np.arange(5)

但这对我来说似乎很不直观。