2014-11-18 9 views
0

Мне нужно найти локальный максимум матрицы. Я использую функцию check(), чтобы проверить, является ли текущий элемент самым большим среди его соседей. Вот мой код, для некоторых элементов она работает, но по какой-то оленьей коже:Найти соседние элементы матричного элемента

A = [[6,5,4,1], 
    [0,2,7,1], 
    [2,4,6,9]] 
def check(row,column): 
    elem = A[row][column] 
    for i in range((row-1), (row+2)): 
     for j in range((column-1), (column+2)): 
      if (i>=0 and i < n) and (j>=0 and j < n) and (row != i and column != j): 
       if A[i][j] > elem: 
        return False 
    return True 
+0

Попробуйте использовать 'numpy' вместо списка. – Jake0x32

+0

Это тестовый алгоритм. Я собираюсь написать его для Javascript. Но перед тестированием в Python – Andrew

ответ

-1

убедитесь, что вы Арент пытаетесь проверить места, которые не являются частью вашего 2-D массива. если вы пытаетесь проверить вещи в этой усадьбе, вы не только ускоряете процесс, потому что вы отключаете ветви, которые вам нужно проверить, но вы также ускоряете процесс выяснения, находится ли место элемента, которое вы сейчас проверяете, или а не макс. , если вы не используете попытку 2-мерного массива, это может сделать процесс более простым.

+0

Пожалуйста, переформатируйте или как-то переписывайте свой ответ. Он * * нечитаемый в текущем состоянии. –

0

Если все, что вы хотите проверить, это если текущий элемент является максимальным, вы можете изменить свою функцию следующим образом , Я добавил образец матрицы А.

A=[[1,2,3],[1,4,3],[4,3,4]] 
def check(row,column): 
    elem = A[row][column] 
    for i in range((row-1), (row+2)): 
     for j in range((column-1), (column+2)): 
      try: 
       if i > -1 and j > -1 and A[i][j] > A[row][column]: 
        return False 
      except IndexError: 
       pass 
    return True 
#Is 2 at (0,1) max? 
print check(0,1) 
#Is 3 at (1,2) max? 
print check(1,2) 
#Is 4 at (1,1) max? 
print check(1,1) 
#Is 4 at (2,2) max? 
print check(1,1) 

Выход:

False 
False 
True 
True 

ловлей и игнорируя IndexError, вы можете избежать проверки, если вы находитесь вне границ в вашем зацикливание (кажется, что это то, что вы пытаетесь сделайте с вашим чеком, используя n, которое вы не определили.) Также я не рассматриваю, являются ли значения равными, так как вас интересует только то, является ли ток максимальным или нет. Если вам нужно сделать что-то другое, когда вы находитесь в текущем элементе, вы можете проверить, что i, j равно строке, соответственно столбцу и поставить пользовательские проверки)

+0

Я прикрепил образец матрицы. Вы algortihm дают неправильный результат даже для [0] [0] элемента – Andrew

+0

@ Андрю, похоже, вы не хотите кругового поиска (col 0 и col 3 не являются соседями). Я изменил свой ответ, чтобы игнорировать отрицательные индексы. – user3885927

Смежные вопросы