我试图获取使用函数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]
表示每列的索引(如果已排序),而是我得到三个都包含零的数组。
非常感谢任何帮助!
答案 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]])