argsort()函数返回一个索引矩阵,可用于索引原始数组,以便结果与sort()结果匹配。
有没有办法应用这些指数?我有两个数组,一个是用于获取排序顺序的数组,另一个是一些相关联的数据。
我想计算一下,但这似乎不起作用。
下面是一个例子:

z=array([1,2,3,4,5,6,7])
z2=array([z,z*z-7])
i=z2.argsort()

z2=array([[ 1,  2,  3,  4,  5,  6,  7],
          [-6, -3,  2,  9, 18, 29, 42]])
i =array([[1, 1, 1, 0, 0, 0, 0],
          [0, 0, 0, 1, 1, 1, 1]])

我想将i应用于z2(或另一个具有相关数据的数组),但我不确定如何应用。

最佳答案

这可能是杀伤力过大,但在第二种情况下会起作用:

import numpy as np
axis = 0
index = list(np.ix_(*[np.arange(i) for i in z2.shape]))
index[axis] = z2.argsort(axis)
z2[index]

# Or if you only need the 3d case you can use np.ogrid.

axis = 0
index = np.ogrid[:z2.shape[0], :z2.shape[1], :z2.shape[2]]
index[axis] = z2.argsort(axis)
z2[index]

09-15 20:14