【问题标题】:finding indices that would sort numpy column returns zeros查找对 numpy 列进行排序的索引返回零
【发布时间】:2017-01-05 00:27:10
【问题描述】:

我正在尝试使用函数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] 表示每列的索引(如果已排序),但是,我得到三个全都包含零的数组。

非常感谢任何帮助!

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

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

    x[:,0] 是一个形状为 (2, 1) 的 matrix。 要对该矩阵的第一(也是唯一)列进行 argsort,您必须告诉 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]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 2012-03-09
      • 2018-04-08
      • 1970-01-01
      • 2017-11-06
      • 2018-05-12
      • 1970-01-01
      • 2021-06-29
      相关资源
      最近更新 更多