2016-11-18 113 views
1

我不知道如何找到矩阵中最小值的索引,你能帮助我吗?我没有找到干啥,这个矩阵中的最小值/ python

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) 
+0

你会想你的矩阵压扁到一维矢量/列表,找到那个的最小值。您可以使用类似内置的'min'函数来查找一维列表的最小值。查看如何将列表弄平。 – danielunderwood

+0

欢迎来到[so]。请查看[问]并提供[mcve]。你期望什么作为你的输出,你有什么尝试? – TemporalWolf

回答

0

首先在互联网上,让我们做一个样品基质:

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) 
+1

糟糕。你打败了我! – Douglas

+1

或者,使用[numpy.where](https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html) - '''np.where(mat == mat.min() )''' – wwii

0

这将2D数组转换为1D数组,然后找到最小值的索引。

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!”由卡特和沃伦桑德。

0

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

>>> 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] 
>>>