簡體   English   中英

在python中找到具有最小值的行和列?

[英]Find the row and column with the min value in python?

我的程序中有一個函數可以進行拆分和浮動。 然后將矩陣傳遞給主程序。 現在,我有一個函數來查找具有最小值的行和列。 我正在獲取所有值的列表,但沒有具有最小值的行和列。

def closest_pair(e):
    for row in range(len(e)):
       for col in range(0,len(row),1):
          minrow = min(e[row])
          mincol = min(e[col])
          return ([minrow], [mincol])

E是從main傳遞到此函數的平方矩陣。 輸入是txt文件,其值如下所示:

2 1 7 7
1 2 7 7
2 5 6 7
5 6 8 9

預期的輸出應為(1、1)或第1行和第1列,矩陣中的值較低。

這幫助我找到了行和列的最小值,但是輸出是得到這對。 同樣對於第一個值為0的值,0不會計數,因此,如果(0,0)的值為0,那么該值就不會算作最小值。 這樣說,例如,如果第1行和第1列的值是[2,2]作為對,並且是比輸出(1,1)唯一的最小對。

您需要找到每行的最小值,然后才能確定具有最小列的行的坐標:

result = min((min((v, c) for c, v in enumerate(row)), r) for r, row in enumerate(e))
return result[1], result[0][1]

此代碼使用enumerate()與列索引來注釋每一個值, 每行找到最小值,注釋每行最小與行號(再次用enumerate ),並且得到最小的行。 結果是帶有((value, column), row)的嵌套元組,我們對其進行解包以返回行索引和列索引。

演示:

>>> e = [[2, 1, 7, 7], [1, 2, 7, 7], [2, 5, 6, 7], [5, 6, 8, 9]]
>>> result = min((min((v, c) for c, v in enumerate(row)), r) for r, row in enumerate(e))
>>> result[0][1], result[1]
(0, 1)

因此位置e[0][1]是矩陣中最小值。 如果您還想包括該頭寸的確切值,請返回:

return result[1], result[0][1], result[0][0]

e是列表列表,對嗎?

因此min(e[row])min(e[col])會給您列表。

您還可以通過枚舉更輕松地遍歷列表

for col, row in enumerate(e):
  minrow = min(row)
  mincol = min([row[col] for row in e]) # need to transpose to a new list
  return ([minrow], [mincol])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM