【问题标题】:Averaging column 2D array python平均列二维数组python
【发布时间】:2013-12-01 21:46:35
【问题描述】:

我有一个 2D arraylist 数据,其中填充了这样的循环:

data.append([TrueID,rssi])

8 次后我得到了这个数据值:

data =

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

我想计算每个 TrueID 的平均 RSSI 值,并返回具有其 TrueID 的最低 RSSI 值。

所以我需要输出:

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

二维数组必须填充到 20 个值,然后像 FIFO 系统一样继续。

欢迎提出所有建议(即使您知道获得相同结果的其他方法)!

谢谢!

【问题讨论】:

  • -54 实际上是这里的最大值。
  • 请提供您尝试过的示例代码。

标签: python arrays list average multidimensional-array


【解决方案1】:

使用collections.defaultdictmax

>>> 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 和字典推导计算平均值并找出最大(键、值)对:

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

【讨论】:

  • 谢谢阿什维尼乔杜里!它就像你说的那样工作,还有一件事:如何在 20 个值之后像 fifo 系统一样覆盖原始值?
  • @user3055369 使用collections.dequemaxlen=20,获得先进先出系统。
  • 我通过使用 append 和 pop 解决了这个问题:lis.append([TrueID,rssi]) d2counter += 1 if d2counter &gt;= 20: lis.pop(0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
相关资源
最近更新 更多