【问题标题】:How do I sort an array by row?如何按行对数组进行排序?
【发布时间】:2015-06-22 18:32:41
【问题描述】:

我有一个数组A,格式如下:

A = [[ 4  3  2  1]
     [ 8  7  6  5]
     [12 11 10  9]
     [16 15 14 13]]

我想按行对这个数组进行排序。所需的输出是:

A = [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]
     [13 14 15 16]]

我尝试使用以下代码(但它不起作用):

import numpy as np
A = np.array([[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]])
print A[np.lexsort(A, axis = 1)]

如何按行排序这个数组?

【问题讨论】:

  • 你应该让你的代码在语法上有效。
  • @juanchopanza 绝对。但是你怎么能指望有没有逗号而不是多余的括号呢?
  • 一个array只有一个行,对吧?

标签: python arrays sorting numpy


【解决方案1】:

不清楚您所说的“按行排序”是什么意思,但您似乎想要对数组的元素进行排序,您可以通过迭代它并对每个元素进行排序来做到这一点:

for i in A: i.sort()

如果你还想对外部数组本身进行排序,那么,对它进行排序:

A.sort()

【讨论】:

  • 我不会添加关于外部数组的这个(令人困惑的)评论。提问者已经添加了预期的行为。
  • @Wolf 我认为 OP 未指定要求。
【解决方案2】:

Numpy 的 sort 有一个 axis 参数,可用于指定对哪个轴进行排序。

import numpy as np
A = np.array([[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]])

A.sort(axis=1)

给出:

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

sort 默认使用axis 作为数组的最后一个轴,所以这里是1,所以在这种情况下你不需要指定axis=1

【讨论】:

    【解决方案3】:
    A = [[ 4,  3,  2,  1],
         [12, 11, 10,  9],
         [ 8,  7,  6,  5],
         [16, 15, 14, 13]]
    for i in A:
        i.sort()
    
    A.sort()
    print A
    

    我假设逐行表示您也想对外部列表进行排序

    【讨论】:

    • @Wolf - 抱歉我不知道 :)
    • @Wolf 顺便说一句,我不是在寻找代表,我碰巧发布了相同的答案。我现在应该删除它。请赐教,我对 SO 真的很陌生。
    • 这取决于你。重复(并更正!)问题部分,您的答案看起来可能更务实。
    【解决方案4】:

    两个不同的答案,都是单行的,如下:

    sorted_A_1 = sorted(sorted(i) for i in A)
    sorted_A_2 = [sorted(i) for i in sorted(A)]
    

    虽然您可能只想修改现有列表,但它们都会生成一个新列表。第一个将 A 中每个列表的排序结果传递给 sorted 函数,第二个只是列表推导。

    此外,虽然这些可能并不比已经发布的答案更清楚,但我个人认为了解解决给定问题的不同方法会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2018-10-21
      • 2016-11-07
      • 2017-11-20
      • 2021-09-21
      • 2021-11-03
      相关资源
      最近更新 更多