所以我的矩阵看起来像这样:
m = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 1, 2, 3],
[4, 5, 6, 7]]
,我想将值与其相邻值进行比较,以便函数返回布尔值。例如,如果我输入的m[1][1]
为6,则该函数应将6与1,2,3,5,7,9,1和2(6左右的单元格)进行比较,并返回6是否为最大数。另外,如果我输入的索引超出范围,例如m[0][4]
,该函数还应该返回False
。
我知道该如何做(有点),但是当涉及到边缘的值时,我完全被卡住了。我不能假设矩阵是4x4(可以是3x3,nxn等等),因此不可能用if语句写出每种情况。我该怎么办?
答案 0 :(得分:0)
您应该自己为此做一些工作。
这里有一些代码可以帮助您入门:
def adjacent_cells(m, row, col):
result = []
for i, j in ((-1, -1), (-1, 0), (-1, 1),
(0, -1), (0, 1),
(1, -1), (1, 0), (1, 1)):
try:
i += row
j += col
if i >= 0 and j >= 0:
result.append(m[i][j])
except IndexError:
pass
return result
以此为基础来完成您的项目。
答案 1 :(得分:0)
这是一种解决方案:
m = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 1, 9, 3],
[4, 5, 6, 7]]
def maxAmongNeighbors(matrix,y,x):
return (
x in range(1,len(matrix[0]))
and y in range(1,len(matrix))
and matrix[y][x] >= max(
*matrix[y-1][x-1:x+2],
*matrix[y][x-1:x+2:2],
*matrix[y-1][x-1:x+2]
)
)
print (maxAmongNeighbors(m,0,0))
print (maxAmongNeighbors(m,1,1))
print (maxAmongNeighbors(m,2,2))
False False True
答案 2 :(得分:0)
尝试一下:
import numpy as np
def isLargest(input, r,c):
padded = np.pad(input, 1, mode='constant')
value = input[r][c]
r += 1
c += 1
if value >= max(padded[r-1][c], padded[r+1][c], padded[r][c-1], padded[r-1][c]):
return True
else:
return False
我使用零填充并解决了这个问题。填充的矩阵为:
[[0 0 0 0 0 0]
[0 1 2 3 4 0]
[0 5 6 7 8 0]
[0 9 1 2 3 0]
[0 4 5 6 7 0]
[0 0 0 0 0 0]]
然后您可以轻松检查状况。您唯一应该注意的是,行和列的索引应增加一个以映射原始值。