2017-03-05 2139 views
0

有人可以幫我嗎?我試圖讓每一行的最小值,該矩陣矩陣的每一行和每列的最小值 - Python

matrix =[[12,34,28,16], 
     [13,32,36,12], 
     [15,32,32,14], 
     [11,33,36,10]] 

因此,例如,每列:我希望我的程序打印出12行1的最小值等。

+0

你可以迭代明智和明智的列。並獲得每行和每列的最大值和最小值。首先嚐試獲得每行的最小值,然後是最大值。然後爲列明智地做它。 ATB :) –

回答

1

使用numpy。

>>> import numpy as np 
>>> matrix =[[12,34,28,16], 
...   [13,32,36,12], 
...   [15,32,32,14], 
...   [11,33,36,10]] 
>>> np.min(matrix, axis=1) 
array([12, 12, 14, 10]) 
>>> np.min(matrix, axis=0) 
array([11, 32, 28, 10]) 
3

讓我們重複任務的聲明:「獲得最小值每一行這個矩陣中的每一列」。

好了,所以,當矩陣有n行,你應該得到n最小值,每行一個。聽起來很有趣,不是嗎?所以,代碼將如下所示:

result1 = [<something> for row in matrix] 

那麼,您需要對每一行做什麼?右鍵,找到最小值,這是超級簡單:

result1 = [min(row) for row in matrix] 

作爲result,你會得到n值列表,就像預期。


等待,現在我們才發現,每一行的最小值,但不是每個,讓我們這樣做的!

鑑於您正在使用Python 3.x,您可以做一些非常了不起的事情。例如,您可以遍歷列輕鬆:

result2 = [min(column) for column in zip(*matrix)] # notice the asterisk! 

zip(*matrix)星號使得matrix每一行的zip是一個單獨的參數,如:

zip(matrix[0], matrix[1], matrix[2], matrix[3]) 

這看起來不是很可讀並取決於matrix中的行數(基本上,您必須對它們進行硬編碼),並且星號可以讓您編寫更清晰的代碼。

zip返回元組和i個元組包含的所有i個值,所以這些元組實際上是給定矩陣的列。現在


,你會發現這個代碼有點難看,你可能需要編寫同樣的事情在一個更簡潔的方式。果然,你可以使用一些函數式編程的魔法:

result1 = list(map(min, matrix)) 
result2 = list(map(min, zip(*matrix))) 

這兩種方法是完全等價的。

+0

非常感謝您的解答!我非常感謝它。:) –

+0

@ S.Troy,您隨時歡迎您! – ForceBru

相關問題