【问题标题】:Locate the largest element in a matrix找出矩阵中最大的元素
【发布时间】:2014-08-02 07:34:44
【问题描述】:

当提示输入矩阵中的行数,然后提示输入这些行的元素时,我需要找到该矩阵中最大的元素并返回其位置(行和列)。

例如,如果我输入 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) 下是错误的,因为在打印结果之前一切正常。谁能告诉它有什么问题?提前感谢您的任何意见!

【问题讨论】:

标签: python matrix


【解决方案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)

【讨论】:

  • 非常感谢!我对其进行了调整并使用了 print(),但它可以工作:)
【解决方案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)

【讨论】:

    【解决方案3】:

    如果你可以使用numpy,那么可以很容易地找到数组中最大值的索引:

    import numpy as np
    na = np.array(a)
    indices = np.where(na == na.max())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-13
      • 2014-04-08
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多