如何不使用for循环查找矩阵每行最大值并将其余值替换为0
实现方法
方法1:基于NumPy向量化实现(无任何显式for循环)
该方案性能最优,尤其适合大矩阵场景,全程使用NumPy的广播和向量化操作,无需手写循环:
import numpy as np # 输入矩阵A A = [[2,2,4,2,2,2], [2,6,2,2,2,2], [2,2,2,2,8,2]] # 转换为NumPy数组 arr = np.array(A) # 计算每行最大值,保持维度适配广播规则 row_max = arr.max(axis=1, keepdims=True) # 仅保留等于最大值的元素,其余位置置0 B = (arr == row_max) * arr # 若需要转回Python原生列表格式,可调用tolist方法 B_list = B.tolist()
输出结果如下:
[[0 0 4 0 0 0] [0 6 0 0 0 0] [0 0 0 0 8 0]]
方法2:纯Python内置函数实现(无显式for关键字)
如果不想引入第三方依赖,可以用map结合匿名函数实现,语法层面不会出现for关键字:
A = [[2,2,4,2,2,2], [2,6,2,2,2,2], [2,2,2,2,8,2]] B = list(map(lambda row: [num if num == max(row) else 0 for num in row], A))
注:该方案中的列表推导属于Python内部的隐式循环,执行效率高于普通显式for循环。
内容的提问来源于stack exchange,提问作者Reza Aalaei
相关产品推荐
相关产品推荐

