找到将numpy列排序的索引返回零

时间:2017-01-04 16:01:24

标签: python numpy

我试图获取使用函数argsort对数组的每列进行排序的索引。但是,它只是简单地返回零而不是真正的索引。例如:

x = np.matrix([[5, 2, 6], [3, 4, 1]])
print(x)

print(x[:,0])
print(x[:,1])
print(x[:,2])

print(x[:,0].argsort())
print(x[:,1].argsort())
print(x[:,2].argsort())

我希望这会返回三个数组。 [1 0][0 1][1 0]表示每列的索引(如果已排序),而是我得到三个都包含零的数组。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

使用切片始终索引matrix会返回另一个 2-d matrix。 (此行为与常规numpy数组不同。)例如,请参阅x[:,0]的输出:

In [133]: x[:,0]
Out[133]: 
matrix([[5],
        [3]])

x[:,0]matrix形状(2,1)。 要控制该矩阵的第一个(也是唯一的)列,您必须告诉argsort使用第一个轴:

In [135]: x[:,0].argsort(axis=0)
Out[135]: 
matrix([[1],
        [0]])

默认值(axis=-1)是使用最后一个轴,由于该矩阵中的行长度为1,因此未给出axis时的结果是一列零。

顺便说一句,您可以一次完成所有列:

In [138]: x
Out[138]: 
matrix([[5, 2, 6],
        [3, 4, 1]])

In [139]: x.argsort(axis=0)
Out[139]: 
matrix([[1, 0, 1],
        [0, 1, 0]])