Python如何实现元组矩阵对应元组逐元素计算(max,min,min)值
元组矩阵逐元素最值计算实现
计算规则
对两个行列数完全一致、存储元素为长度3的浮点型元组的矩阵,逐坐标位置计算结果元组,规则如下:
- 结果元组第1位:取两个矩阵同位置元组第1位的最大值
- 结果元组第2位:取两个矩阵同位置元组第2位的最小值
- 结果元组第3位:取两个矩阵同位置元组第3位的最小值
计算示例:
matrix1[0][0] = (5.0, 6.0, 7.0)
matrix2[0][0] = (6.0, 3.0, 7.0)
对应结果:(max(5.0,6.0), min(6.0,3.0), min(7.0,7.0)) = (6.0, 3.0, 7.0)
常见出错点
原有代码输出不符合预期,基本是以下几个原因导致:
- 遍历过程中行、列索引错位,没有严格对齐两个矩阵的同位置元素
- 三个位置的最值规则混淆,比如全量取max/min,或是第2、3位误用max计算
- 直接对整个元组做max/min比较,没有按索引逐位取值计算
正确代码实现
def calc_matrix(matrix_a, matrix_b): res = [] # 按行并行遍历 for row_a, row_b in zip(matrix_a, matrix_b): current_row = [] # 按列遍历取同位置元组 for t_a, t_b in zip(row_a, row_b): # 按规则逐位计算 p0 = max(t_a[0], t_b[0]) p1 = min(t_a[1], t_b[1]) p2 = min(t_a[2], t_b[2]) current_row.append((p0, p1, p2)) res.append(current_row) return res # 测试验证 if __name__ == "__main__": m1 = [[(5.0, 6.0, 7.0), (2.0, 8.0, 1.0)], [(3.0, 9.0, 4.0), (7.0, 2.0, 5.0)]] m2 = [[(6.0, 3.0, 7.0), (4.0, 5.0, 3.0)], [(1.0, 7.0, 2.0), (5.0, 1.0, 6.0)]] print(calc_matrix(m1, m2))
测试输出和预期完全一致:[[(6.0, 3.0, 7.0), (4.0, 5.0, 1.0)], [(3.0, 7.0, 2.0), (7.0, 1.0, 5.0)]]
补充说明
- 用
zip做并行遍历天然对齐同位置元素,不会出现索引错位问题,代码也更简洁 - 如果需要做输入合法性校验,可以在遍历前增加两个矩阵行数、列数、元组长度的判断逻辑,避免非法输入导致运行报错
- 实现无第三方依赖,纯Python标准语法编写,兼容Python3.6及以上版本
内容的提问来源于stack exchange,提问作者Mershia Rabuni
相关产品推荐
相关产品推荐

