2013-04-10 5 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

+0

Да, я использую Numpy –

ответ

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'? Если да, то почему? –

+0

Да, эти операции - это сила numpy ndarrays. Он будет быстрее и эффективнее, поскольку деталь реализации - это код C. – wim

+0

вы также можете вернуть точно правильные поплавки (я не совсем уверен, что вы можете положиться на это ... точность поплавка - это странно) –

4

Использование списка понимание:

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

map с max чище ИМО.

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

map documentation.

+1

Всегда забывайте о функциональных возможностях программирования. – squiguy

+1

Но если arr является numpy.Arrary объект, >>> s массив ([[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

+0

Поцарапать это. Я также получил результаты, которые получает Шэн. Не огромная сделка, а интересная странность. –

1
map(max,my_array) 

Я думаю, что тот довольно короткий ...

0

Может быть, вместо того, чтобы второй цикл просто использовать max функцию

Смежные вопросы