有人可以帮帮我吗?我试图获得该矩阵的每一行和每列的最小值
matrix =[[12,34,28,16],
[13,32,36,12],
[15,32,32,14],
[11,33,36,10]]
例如:我希望我的程序打印出12是行1的最小值,依此类推。
答案 0 :(得分:3)
让我们重复一下任务语句:“获取每一行和此列 的最小值”。
好的,如果矩阵有n
行,你应该得到n
个最小值,每行一个。听起来很有意思,不是吗?所以,代码看起来像这样:
result1 = [<something> for row in matrix]
那么,你需要对每一行做什么?是的,找到最小值,这非常简单:
result1 = [min(row) for row in matrix]
作为result
,您将获得n
值列表,与预期一样。
等等,到目前为止我们只找到了每行的最小值,但没有找到每个列的最小值,所以我们也这样做吧!
鉴于您使用的是Python 3.x,您可以做一些非常棒的事情。例如,您可以轻松地循环遍历列:
result2 = [min(column) for column in zip(*matrix)] # notice the asterisk!
zip(*matrix)
中的星号使matrix
的每一行成为zip
的单独参数,如下所示:
zip(matrix[0], matrix[1], matrix[2], matrix[3])
这看起来不太可读,并且取决于matrix
中的行数(基本上,你必须对它们进行硬编码),星号可以让你编写更清晰的代码。
zip
返回元组,i
元组包含所有行的i
值,因此这些元组实际上是列的给定矩阵。
现在,您可能会发现此代码有点难看,您可能希望以更简洁的方式编写相同的内容。果然,你可以使用一些函数式编程魔术:
result1 = list(map(min, matrix))
result2 = list(map(min, zip(*matrix)))
这两种方法完全相同。
答案 1 :(得分:2)
使用numpy。
>>> import numpy as np
>>> matrix =[[12,34,28,16],
... [13,32,36,12],
... [15,32,32,14],
... [11,33,36,10]]
>>> np.min(matrix, axis=1) # computes minimum in each row
array([12, 12, 14, 10])
>>> np.min(matrix, axis=0) # computes minimum in each column
array([11, 32, 28, 10])