想要一种干净的方法来查找矩阵中间的索引,如果没有“中间”,则可以找到周围最大元素的索引。注意矩阵并不总是正方形。
Ex 1.输入:
[[1,2],[3,4]]
(1,2)
(3,4)
所以这将返回(1,1),因为“中间”周围的最大元素为4。
Ex2。输入:
[[1,2,3],[4,5,6],[7,8,9]]
(1,2,3)
(4,5,6)
(7,8,9)
这将返回(1,1),因为那是矩阵中间的索引。
希望能以一种干净的方式返回上述索引!
答案 0 :(得分:0)
让您的矩阵成为NumPy数组。
import mumpy as np
a = np.array([[1,2], [3,4]])
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
c = np.random.random_integers(100, size=8).reshape(2, -1)
#array([[41, 61, 47, 51],
# [40, 81, 23, 66]])
检查尺寸,提取“中心”,找到最大值及其坐标,然后进行调整:
def find_center(a):
x = (a.shape[0] // 2 if a.shape[0] % 2 else a.shape[0] // 2 - 1,
a.shape[0] // 2 + 1)
y = (a.shape[1] // 2 if a.shape[1] % 2 else a.shape[1] // 2 - 1,
a.shape[1] // 2 + 1)
center = a[x[0]:x[1], y[0]:y[1]]
argmax = np.unravel_index(center.argmax(), center.shape)
return argmax[0] + x[0], argmax[1] + y[0] # Adjust
测试:
find_center(a)
#(1, 1)
find_center(b)
#(1, 1)
find_center(c)
#(1, 1) - 81!
答案 1 :(得分:0)
在直接Python中:
def mid(n): return {(n-1)//2,n//2}
max(((i,j) for i in mid(len(a)) for j in mid(len(a[0]))),
key=lambda ij: a[ij[0]][ij[1]])