繁体   English   中英

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

[英]Minimum value in each row and each column of a matrix - Python

有人可以帮我吗? 我正在尝试获取此矩阵的每一行和每一列的最小值

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

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

使用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])

让我们重复任务语句:“获取此矩阵的每一行每一列的最小值”。

好的,因此,如果矩阵有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)))

这两种方法是绝对等效的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM