You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现左序二进制矩阵列重排序:无行数上限场景解决方案问询

左序二进制矩阵重排Python实现

核心思路

不用将列显式转换为二进制整数,利用Python原生的元组逐元素比较规则,直接把每一列作为排序的key进行降序排列,完全不受行数N的上限限制。
元组比较的逻辑恰好符合二进制数的比较规则:优先比较第一个元素(对应矩阵第一行,最高有效位),相等再依次比较后续元素(对应更低的有效位)。

纯Python实现

def left_order_matrix(matrix):
    # 转置矩阵提取所有列,按列降序排序后再转置回行优先格式
    sorted_columns = sorted(zip(*matrix), reverse=True)
    return [list(row) for row in zip(*sorted_columns)]

# 示例测试
if __name__ == "__main__":
    matrix = [
        [0, 1, 1],
        [1, 1, 0]
    ]
    result = left_order_matrix(matrix)
    print(result)
    # 输出:[[1, 1, 0], [1, 0, 1]]

适用大规模矩阵的NumPy实现

如果处理的矩阵规模很大,推荐用NumPy版本,运算效率更高:

import numpy as np

def left_order_matrix_np(matrix):
    n_rows = matrix.shape[0]
    # lexsort默认最后传入的键优先级最高,倒序传入行实现最高位优先,最后反转得到降序结果
    sorted_col_indices = np.lexsort([matrix[i, :] for i in reversed(range(n_rows))])[::-1]
    return matrix[:, sorted_col_indices]

# 示例测试
if __name__ == "__main__":
    matrix = np.array([
        [0, 1, 1],
        [1, 1, 0]
    ])
    result = left_order_matrix_np(matrix)
    print(result)
    # 输出:
    # [[1 1 0]
    #  [1 0 1]]

方案优势

  • 无行数限制:无需任何二进制转整数的计算,不会出现溢出、大数计算性能衰减的问题,哪怕行数达到十万级也可正常运行
  • 时间复杂度最优:整体复杂度为O(KNlogK)(K为列数,N为行数),是该排序问题的理论最优复杂度
  • 逻辑无偏差:完全匹配左序形式的定义,不会出现排序错误

内容的提问来源于stack exchange,提问作者Rylan Schaeffer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 20:54:08