"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,依此类推。所以当应用 b
到 a
时,我应该得到:
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)
但这对我来说似乎很不直观。
我有一些数据数组
a = [6,4,3,1,5]
和一个“定位数组”,它给出了这些元素应该如何重新排列的索引,
b = [4,2,0,1,3]
这意味着:a
的第一个元素应该转到索引 4,a
的第二个元素应该转到索引 2,依此类推。所以当应用 b
到 a
时,我应该得到:
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)
但这对我来说似乎很不直观。