【问题标题】:minimal value in matrix / python矩阵/python中的最小值
【发布时间】:2017-04-02 21:25:17
【问题描述】:

我不知道如何在矩阵中找到最小值的索引,你能帮我吗?我没有在互联网上找到任何关于此的内容

def printMatrix(matrix):
    for i in matrix:
       for j in i:
          print(j, end=' ')
       print()



m=[ [1, 1, 2, 5, 6, 1] , [5, 6, 8, 5, 6, 7] , [10, 12, 10, 12, 11, 11] , [8, 10, 5, 6, 8, 9] , [6, 5, 10, 12, 15, 19]]


printMatrix(m)

【问题讨论】:

  • 您需要将矩阵展平为一维向量/列表并找到其最小值。您可以使用类似内置的 min 函数来查找一维列表的最小值。环顾四周,了解如何展平列表。
  • 欢迎来到Stack Overflow。请查看How to Ask 并提供minimal reproducible example。你期望你的输出是什么,你尝试了什么?

标签: python arrays matrix min


【解决方案1】:

首先,让我们制作一个示例矩阵:

import numpy as np

np.random.seed(100)

mat = np.random.rand(3, 3)

print(mat)

这是我们的矩阵:

[[ 0.54340494  0.27836939  0.42451759]
 [ 0.84477613  0.00471886  0.12156912]
 [ 0.67074908  0.82585276  0.13670659]]

然后,我们可以设置我们的初始“最小”测试值以及该值在矩阵中的位置:

min_val = mat[0][0]
min_idx = (0, 0)

接下来,我们可以遍历矩阵中的每一行,使用enumerate跟踪我们所在行的索引,使用np.argmin查找每行中最小元素的索引:

for idx, row in enumerate(mat):
    if min(row) < min_val:
        min_val = min(row)
        min_idx = (idx, np.argmin(row))

print(min_val, min_idx)

而且,瞧!最小值和索引是:

0.00471885619097 (1, 1)

【讨论】:

  • 糟糕。你打败了我!
  • 或者,使用numpy.where - np.where(mat == mat.min())
【解决方案2】:

这会将二维数组转换为一维数组,然后找到最小值的索引。

def maxIndex(matrix):
    matrix2 = []
    for a in range(len(matrix)):
        for b in range(len(matrix[a])):
            matrix2.append(matrix[a][b])
    val = -(10)^99
    index = 10^99
    for a in range(len(matrix2)):
        if matrix2[a]<val:
            val = matrix2[a]
            index = a
    return index

在本网站上询问有关 Python 的问题之前,您应该首先了解 Python 的基础知识。我推荐这本书“Hello World!”作者:卡特和沃伦·桑德。

【讨论】:

    【解决方案3】:

    如果你只需要第一次出现:

    >>> minimum = min(map(min, m))
    >>> for i, thing in enumerate(m):
        try:
            j = thing.index(minimum)
            print('minimum is at m[{}][{}]'.format(i,j))
        except ValueError as e:
            pass
    
    minimum is at m[0][0]
    

    如果你需要所有出现的索引:

    >>> minimum = min(map(min, m))
    >>> for i, thing in enumerate(m):
        for j, x in enumerate(thing):
            if x == minimum:
                print('minimum is at m[{}][{}]'.format(i,j))
    
    minimum is at m[0][0]
    minimum is at m[0][1]
    minimum is at m[0][5]
    >>> 
    

    【讨论】:

      猜你喜欢
      • 2017-07-21
      • 2021-08-25
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2018-10-14
      • 2013-11-24
      • 1970-01-01
      相关资源
      最近更新 更多