【问题标题】:Sort a structured Numpy array based on a single column while preserving order in other columns基于单个列对结构化 Numpy 数组进行排序,同时保留其他列中的顺序
【发布时间】:2021-04-05 19:29:15
【问题描述】:

我想按第一列对以下输入进行排序:

a = np.array([(2, 1), (1, 2), (2, 3)], dtype=[('c1', int), ('c2', int)])

[[2, 1],
[1, 2],
[2, 3]]

我试过a.sort(order='c1'),然后是print(a[::-1]

预期输出(保留第二列顺序):

[[2, 1],
[2, 3],
[1, 2]]

实际输出:

[[2, 3],
[2, 1],
[1, 2]]

【问题讨论】:

    标签: numpy sorting structured-array


    【解决方案1】:

    你做不到。这些 dtype 元组在比行更深的级别绑定在一起。它们是字段,而不是列。您可以对x=a['c1'] 进行排序并写回。

    In [547]: a = np.array([(2, 1), (1, 2), (2, 3)], dtype=[('c1', int), ('c2', int)])
         ...: 
    In [548]: a
    Out[548]: array([(2, 1), (1, 2), (2, 3)], dtype=[('c1', '<i8'), ('c2', '<i8')])
    In [549]: x=np.sort(a['c1'])
    In [550]: x
    Out[550]: array([1, 2, 2])
    In [551]: a['c1']=x
    In [552]: a
    Out[552]: array([(1, 1), (2, 2), (2, 3)], dtype=[('c1', '<i8'), ('c2', '<i8')])
    

    【讨论】:

    • 这不是和我做的一样,只是使用了更多的内存吗?输出是相同的。
    【解决方案2】:

    我很确定我已经弄明白了。否定它:

    a['c1'] = -a['c1']
    a.sort(order='c1')
    a['c1'] = -a['c1']
    print(a)
    

    导致

    [(2, 1) (2, 3) (1, 2)]
    

    我不会接受这个答案,以防有人有更优化的解决方案。

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 2018-05-28
      • 2021-01-29
      • 2023-01-26
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多