2013-04-10 93 views
9

說我有一個多維數組類似如下:如何從多維數組中返回最高值?

[ 
    [.1, .2, .9], 
    [.3, .4, .5], 
    [.2, .4, .8] 
] 

什麼會返回一個包含從每個子陣列([.9,.5,.8])最高值的一維數組的最佳方式*?我想我可以做手工做類似如下:

newArray = [] 
for subarray in array: 
    maxItem = 0 
    for item in subarray: 
     if item > maxItem: 
      maxItem = item 
    newArray.append(maxItem) 

不過我很好奇,如果有一個更清潔的方式做到這一點?

*在這種情況下最好=行最少的代碼

+1

您是否使用numpy的或不? – Sheng 2013-04-10 04:41:29

+0

是的,我正在使用Numpy – 2013-04-10 04:41:57

回答

9

既然你在留言中提到您正在使用numpy的...

>>> import numpy as np 
>>> a = np.random.rand(3,3) 
>>> a 
array([[ 0.43852835, 0.07928864, 0.33829191], 
     [ 0.60776121, 0.02688291, 0.67274362], 
     [ 0.2188034 , 0.58202254, 0.44704166]]) 
>>> a.max(axis=1) 
array([ 0.43852835, 0.67274362, 0.58202254]) 

編輯:文檔是here

+0

有意思,你會推薦使用'map' /'max'這個方法嗎?如果是這樣,爲什麼? – 2013-04-10 04:56:13

+0

是的,這些操作是numpy ndarrays的優勢。它會更快更高效,因爲實現細節是C代碼。 – wim 2013-04-10 04:58:45

+0

你可能會回到確切的右側花車也(我不完全確定你可以依靠那個......浮點精度很奇怪) – 2013-04-10 05:00:07

4

使用列表理解:

maxed = [max(sub_array) for sub_array in array] 
9

mapmax是清潔器IMO。

>>> arr = [ 
... [.1, .2, .9], 
... [.3, .4, .5], 
... [.2, .4, .8] 
... ] 
>>> map(max, arr) 
[0.9, 0.5, 0.8] 

map documentation

+1

總是忘記功能編程選項。 – squiguy 2013-04-10 04:47:28

+1

但是,如果arr是一個numpy.Arrary對象,則結果是([[0​​.1,0.2,0.9], [0.3,0.4,0.5], [0.2,0.4,0.8]]),結果是>>> map(max,s) [0.90000000000000002,0.5,0.80000000000000004],爲什麼? – Sheng 2013-04-10 04:53:48

+0

劃痕。我也得到了盛正在得到的結果。不是一個大問題,而是一個有趣的怪事。 – 2013-04-10 04:57:11

1
map(max,my_array) 

我認爲是很短...

0

也許不是第二個for循環只需使用max功能

8

試試這個:

max(array.flatten())