矩阵的每一行和每列的最小值 - Python

时间:2017-03-05 16:04:37

标签: python algorithm python-3.x matrix min

有人可以帮帮我吗?我试图获得该矩阵的每一行和每列的最小值

matrix =[[12,34,28,16],
        [13,32,36,12],
        [15,32,32,14],
        [11,33,36,10]]

例如:我希望我的程序打印出12是行1的最小值,依此类推。

2 个答案:

答案 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])