Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中基于最高有效位的二进制矩阵列排序_Python_Algorithm_Sorting - Fatal编程技术网

python中基于最高有效位的二进制矩阵列排序

python中基于最高有效位的二进制矩阵列排序,python,algorithm,sorting,Python,Algorithm,Sorting,所以我有一个2D数组,看起来像:[[0,1,1][1,0,0][0,0,1]],其中所有值都存储为int,但它们表示实际位。第一行中的值被认为是最重要的。假设每列都是基于列中的位的整数,我想按降序对列进行排序,使其看起来像[[1,1,0][0,0,1][0,0,1]]。然而,我对如何在python中实现这一点非常迷茫。有人建议我使用基数排序,但我不知道这对我的情况有什么帮助。我已经在下面写了两个矩阵,这样更容易可视化 011 110 100 001 001 100 我的方法是:读取每一列,转

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

011 110
100   001
001 100

我的方法是:读取每一列,转换为int,对int进行排序,映射回列。但是如果我使用的是维数
1000x10000

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

试试这个:

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)))
试试这个:

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)))

正如我所说的,调换,排序,调回:

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

正如我所说的,调换,排序,调回:

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

我不理解从<代码> [[0, 1, 1 ] [1, 0, 0 ] [0],1] ]到<代码> [[1,1,0] [0,01] [0],1] ]的逻辑,转置它,你就会知道。把每个列看作是包含int的位。然后<代码> 101 < /代码>是5,<代码> 100 < /代码>是4,<代码> 010 2。所以我把代表5的列放在开头,接下来是4,然后是2。这说明了吗?啊,是的,那就是你的答案:换位,排序,换回。即使我换位,我也要对整行进行排序。那么,这是否意味着,我认为每一行都是int?我不理解从<代码> [[0, 1, 1 ] [0],[0],1] ]到<代码> [[1,1,0] [0,01] [0],1] ]的逻辑,转置它,你就会知道。把每个列看作是包含int的位。然后<代码> 101 是5,<代码> 100 < /代码>是4,而<代码> 010 2。所以我把代表5的列放在开头,接下来是4,然后是2。这说明了吗?啊,是的,那就是你的答案:换位,排序,换回。即使我换位,我也要对整行进行排序。这是否意味着,我认为每一行都是int?你不必做转换。一旦你转置了它们,你就可以把它们作为二进制字符串,以列表的形式。那么,就分类吧。你有什么问题吗(还有我的答案)@MohanavelT?它以一种比int转换更聪明的方式完成这项工作。就我所知,这正是OP想要的。你对垃圾邮件的定义很奇怪…你真的不需要做转换。一旦你转置了它们,你就可以把它们作为二进制字符串,以列表的形式。那么,就分类吧。你有什么问题吗(还有我的答案)@MohanavelT?它以一种比int转换更聪明的方式完成这项工作。就我所知,这正是OP想要的。你对垃圾邮件的定义很奇怪。。。