2016-11-18 22 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

Вы хотите, чтобы сгладить вашу матрицу к 1D вектор/список и найти минимальное значение этого. Вы можете использовать что-то вроде встроенной функции 'min', чтобы найти минимум 1D-списка. Посмотрите вокруг, чтобы узнать, как сгладить список. – danielunderwood

+0

Добро пожаловать в [so]. Проверьте [ask] и укажите [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] 
>>> 
Смежные вопросы