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

Python矩阵行列最大值求解:如何线性时间获取列最大值?

获取矩阵列最大值的线性时间实现

嘿,很高兴你已经搞定了行最大值的计算!关于列最大值的线性时间实现,咱们有两种靠谱的方式,其中一种还能一次性同时算出行和列的最大值,完美符合你的线性时间要求。

方法一:用转置快速计算列最大值

Python里的zip(*grid)可以帮我们快速转置矩阵——把原矩阵的列变成行,这样就能像计算行最大值一样,直接对转置后的每个“行”求最大值:

grid = [[3, 0, 8, 4], [2, 4, 5, 7], [9, 2, 6, 3], [0, 3, 1, 0]]
# 转置矩阵后,每个元素是原矩阵的一列,求每列的最大值
col_max = [max(col) for col in zip(*grid)]
print(col_max)  # 输出 [9, 4, 8, 7]

这个方法的时间复杂度是O(n*m)(n是行数,m是列数),因为每个元素都会被访问一次,属于线性时间范畴。不过它本质上是先转置再计算,会额外生成转置后的迭代器(内存开销很小,但如果矩阵特别大,我们可以用更省内存的方法)。

方法二:一次遍历同时计算行+列最大值

如果你想要更极致的线性时间实现(只遍历矩阵一次,同时得到行和列的最大值),可以手动初始化行、列最大值列表,然后逐个元素检查更新:

grid = [[3, 0, 8, 4], [2, 4, 5, 7], [9, 2, 6, 3], [0, 3, 1, 0]]

rows = len(grid)
cols = len(grid[0]) if rows > 0 else 0

# 初始化行、列最大值列表,若矩阵含负数,建议初始值设为负无穷
row_max = [0] * rows
col_max = [0] * cols

# 遍历每个元素,同时更新对应行和列的最大值
for i in range(rows):
    for j in range(cols):
        current_val = grid[i][j]
        # 更新当前行的最大值
        if current_val > row_max[i]:
            row_max[i] = current_val
        # 更新当前列的最大值
        if current_val > col_max[j]:
            col_max[j] = current_val

print("左侧视角(行最大值):", row_max)  # 输出 [8, 7, 9, 3]
print("上方视角(列最大值):", col_max)  # 输出 [9, 4, 8, 7]

这个方法的时间复杂度同样是O(n*m),而且只遍历一次矩阵,内存开销极小——只需要两个存储最大值的列表,完全符合线性时间的要求。

为什么这两种方法都是线性时间?

线性时间复杂度在这里指的是时间与矩阵的总元素数成正比,也就是遍历每个元素恰好一次。上面两种方法都满足这个条件:第一种转置的过程会遍历所有元素,第二种更是直接一次遍历完成所有计算,都没有多余的重复操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:31:04