在矩阵中找到最大元素
当我被要求输入一个矩阵的行数,然后再输入这些行的元素时,我需要找到这个矩阵中最大的元素,并返回它的位置(行和列)。
举个例子,如果我输入2行数据如下:
[1 3 7]
[4 8 1]
那么最大的元素的位置就是(1, 1),这表示行索引是1,列索引也是1。
我有以下代码,它在获取位置方面半成功:
def main():
matrix = []
numRows = eval(input("Enter the number of rows in the list: "))
for i in range(numRows):
rows = input("Enter a row: ")
items = rows.split()
list = [eval(x) for x in items]
matrix.append(list)
return locateLargest(matrix)
def locateLargest(a):
for i in range(len(a)):
indexOfMaxRow = 0
maxRow = max(a[i])
for row in range(len(a)):
if max(a[row]) > maxRow:
maxRow = max(a[row])
indexOfMaxRow = row
for j in range(len(a)):
indexOfMaxColumn = 0
maxColumn = max(a[j])
for column in range(len(a)):
if max(a[column]) > maxColumn:
maxColumn = max(a[column])
indexOfMaxColumn = column
print("The location of the largest element is at (", indexOfMaxRow, ", ", indexOfMaxColumn, ")")
main()
我觉得我的代码在def locateLargest(a)
这一部分有问题,因为在打印结果之前一切都正常。有没有人能告诉我哪里出错了?非常感谢任何建议!
3 个回答
2
这太复杂了:
A = [[1, 3, 7],
[4, 8, 1]]
def max_element(A):
r, (c, l) = max(map(lambda t: (t[0], max(enumerate(t[1]), key=lambda v: v[1])), enumerate(A)), key=lambda v: v[1][1])
return (l, r, c)
print max_element(A)
输出
(8, 1, 1)
6
如果你能使用 numpy 这个库,那么在一个数组中找到最大值的位置就非常简单了:
import numpy as np
na = np.array(a)
indices = np.where(na == na.max())
1
你的 locateLargest
函数可以简化很多:
def locateLargest(matrix):
largest_num = None
row = None
col = None
for row_idx, row in enumerate(matrix):
for col_idx, num in enumerate(row):
if num > largest_num or largest_num is None:
largest_num = num
row = row_idx
col = col_idx
return (largest_num, row, col)
这个函数会返回最大的数字,以及它所在的列和行的索引(索引从0开始)。
举个例子:
>>> print(locateLargest([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
(9, 2, 2)