【问题标题】:Minimum value in each row and each column of a matrix - Python矩阵的每一行和每一列的最小值 - Python
【发布时间】:2017-07-25 10:29:15
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以逐行和逐列迭代。并获取每一行和每一列的最大值和最小值。首先尝试获取每行的最小值,然后再获取最大值。然后按列执行。 ATB :)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    好的,所以,如果矩阵有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 返回元组,ith 元组包含 所有行的 ith 值,因此这些元组实际上是给定矩阵的列。


    现在,您可能会发现这段代码有点难看,您可能希望以更简洁的方式编写相同的内容。果然,你可以使用一些函数式编程魔法:

    result1 = list(map(min, matrix))
    result2 = list(map(min, zip(*matrix)))
    

    这两种方法是完全等价的。

    【讨论】:

    • 非常感谢您的解释!我非常非常感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2018-11-26
    • 2013-08-11
    相关资源
    最近更新 更多