Skip to main content
 首页 » 编程设计

python之如何获得列表中每个列表的平均值以避免某些值

2025年05月04日16mengfanrong

如何在列表中分别计算每个列表的平均值,避免出现特殊值(-999)?

A = [[4,5,7,8,-999],[3,8,5,7,-999]] 
M = [sum(x)/len(x) for x in [y for y in A if y!= -999] 
print (M) 

有什么想法吗???

为了获得最佳速度:有人可以更正以下代码吗? @alexanderlukanin13

M = [np.mean(L [L!=-999])for L in A] 

请您参考如下方法:

正如您提到的numpy:

>>> import numpy as np 
>>>  
>>> A = [[4,5,7,8,-999],[3,8,5,7,-999]] 
>>> M = [np.mean([x for x in L if x > -999]) for L in A] 
>>> print M 
[6.0, 5.75] 

编辑

正如您提到速度是一项重要要求,您可以这样做:

>>> B = np.array(A) 
>>> np.average(B, axis=1, weights=B!=-999) 
array([ 6.  ,  5.75]) 

一切都发生在 numpy(即 C)空间中,这应该非常快。

稍微解释一下发生了什么:

np.mean(A, axis=1) 和等效的 np.average(A, axis=1) 计算数组列的平均值,即每一行的均值向量,这就是你想要的。 average允许使用权重:我们使用B!=-999,这是一个 bool 数组,使用时评估为1和0作为权重,即忽略评估为 False 的值。