在Python中对numpy数组形状(m,n)进行分层排序

问题描述 投票:0回答:1

按列排序,例如:输入:

[ [2,6],
  [1,7],
  [1,1],   # n-lets possible
  [2,1],
  [1,4],
  [1,1] ]

排序输出:

[ [1,1],
  [1,1],   # n-lets possible
  [1,4],
  [1,7],
  [2,1],
  [2,6] ]

最好是例如numpy 排序函数可提高速度。抱歉,这个简单的问题;找不到简单的解决方案。

python-3.x sorting multidimensional-array numpy-ndarray
1个回答
0
投票

您可以使用

numpy.lexsort
函数按多列对 NumPy 数组进行排序。在您的例子中,您有一个列表列表,因此您首先需要将其转换为 NumPy 数组。这是一个例子:

import numpy as np

# Your input list
input_list = [
    [2, 6],
    [1, 7],
    [1, 1],
    [2, 1],
    [1, 4],
    [1, 1]
]

# Convert the list to a NumPy array
array = np.array(input_list)

# Use lexsort to sort by multiple columns
sorted_indices = np.lexsort(array.T)

# Use the sorted indices to get the sorted array
sorted_array = array[sorted_indices]

# Convert the sorted array back to a list of lists
sorted_list = sorted_array.tolist()

print(sorted_list)

这将输出:

[[1, 1], [1, 1], [1, 4], [1, 7], [2, 1], [2, 6]]

这里,

np.lexsort(array.T)
首先根据第二列然后根据第一列对数组进行排序。结果是按两列排序的数组。

© www.soinside.com 2019 - 2024. All rights reserved.