2013-12-01 2 views
0

У меня есть ArrayList данные 2D заполняющего с петлей, как это:Усреднения питон колонок 2D массива

data.append([TrueID,rssi]) 

после 8 раз я получил это значение для данных:

data = 

    [['469420270013002A', -90], 
    ['469420270005000C', -89], 
    ['469420270013002A', -94], 
    ['4694202700270003', -53], 
    ['469420270005000C', -91], 
    ['469420270013002A', -92], 
    ['4694202700270003', -55]] 

Я хочу, чтобы вычислить среднее значение RSSI для каждого TrueID и возвращает самое низкое значение RSSI с его TrueID.

Поэтому мне нужен вывод:

print "The weakest ID is " ID_result " with Rssi value of " rssi_result 
>>The weakest ID is '4694202700270003' with Rssi value of -54 

Это необходимо 2D-массив заполняет до 20 значений и продолжается как система FIFO.

Все предложения приветствуются (даже если вы знаете другие методы, чтобы получить тот же результат)!

Спасибо!

+0

'-54' на самом деле будет максимальным значение здесь. –

+0

Просьба привести пример кода того, что вы пробовали. –

ответ

1

Использование collections.defaultdict и max:

>>> from collections import defaultdict         
>>> lis = [['469420270013002A', -90],         
    ['469420270005000C', -89], 
    ['469420270013002A', -94], 
    ['4694202700270003', -53], 
    ['469420270005000C', -91], 
    ['469420270013002A', -92], 
    ['4694202700270003', -55]] 
>>> d = defaultdict(list)     
>>> for k, v in lis:              
    d[k].append(v) 
...  

Теперь d содержит:

>>> d 
defaultdict(<type 'list'>, 
{'469420270005000C': [-89, -91], 
'4694202700270003': [-53, -55], 
'469420270013002A': [-90, -94, -92]}) 

Теперь используйте max и Dict понимание, чтобы вычислить среднее и выяснить, макс (ключ, значение) пара:

>>> max({k:sum(v)/float(len(v)) for k, v in d.items()}.items(), key=lambda x:x[1]) 
('4694202700270003', -54.0) 
+0

Спасибо Ашвини Чодхари! Он работает, как и сказал, еще 1 вещь: Как сделать после того, как 20 значений переписывают исходные значения, такие как система fifo? – user3055369

+0

@ user3055369 Используйте ['collections.deque'] (http://docs.python.org/2/library/collections.html#collections.deque) с помощью' maxlen = 20', чтобы получить систему FIFO. –

+0

Я решил это с помощью добавления и поп: 'lis.append ([TrueID, RSSI]) d2counter + 1 = , если d2counter> = 20: lis.pop (0)' – user3055369

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