根据python中的最高有效位对二进制矩阵列进行排序

时间:2019-01-24 07:48:39

标签: python algorithm sorting

所以我有一个2D数组,看起来像:[[0, 1, 1][1, 0, 0][0,0,1]],其中所有值都存储为整数,但它们表示实际位。第一行中的值被认为是最重要的。假设每列都是基于列中位的整数,我想按降序对列进行排序,以使其看起来像[[1,1,0][0,0,1][0,0,1]]。但是,我对如何在python中实现此目标非常迷失。有人建议我使用基数排序,但是我对这对我的情况没有帮助。我已在下面编写了两个矩阵,因此更易于可视化。

011 110 100 001 001 100

我的方法:阅读每一列,转换为int,对int进行排序,然后映射回该列。但是,如果我要处理尺寸为1000x10000

的矩阵,这种方法可能会非常复杂

但是我觉得应该有一个更聪明的方法来做到这一点,尤其是在python中。我应该如何处理?

2 个答案:

答案 0 :(得分:3)

正如我所说的转置,排序,转置回去

a = [[0, 1, 1],[1, 0, 0],[0,0,1]]
a = list(zip(*a))
a.sort(reverse=True)
a = list(map(list,zip(*a)))

答案 1 :(得分:1)

尝试一下:

a = [[0, 1, 1], [1, 0, 0], [0, 0, 1]]
b = list(map(list, zip(*a)))
c = sorted(b, reverse=True)
d = list(map(list, zip(*c)))