查找对 numpy 列进行排序的索引返回零

Oll*_*lie 4 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())
Run Code Online (Sandbox Code Playgroud)

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

非常感谢任何帮助!

War*_*ser 5

matrix用切片索引 a总是返回另一个2-d matrix。(此行为与常规 numpy 数组不同。)例如,请参见以下输出x[:,0]

In [133]: x[:,0]
Out[133]: 
matrix([[5],
        [3]])
Run Code Online (Sandbox Code Playgroud)

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

In [135]: x[:,0].argsort(axis=0)
Out[135]: 
matrix([[1],
        [0]])
Run Code Online (Sandbox Code Playgroud)

默认值 ( 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]])
Run Code Online (Sandbox Code Playgroud)