Skip to main content
 首页 » 编程设计

python之如何计算列表中省略特殊值的平均值

2025年05月04日15bonelee

如何计算列表中省略特殊值(-999)的值的平均值?

import numpy as np 
A = [4,5,7,8,-999] 
M = np.mean(A)  

有什么想法吗???

请您参考如下方法:

>>> import numpy as np 
>>> a = np.array([1,2,3,4,5]) 
>>> np.mean(a) 
3.0 
>>> np.mean(a[a<=3]) 
2.0 
>>> np.mean(a[a!=4]) 
2.75 

对于 OP 案例:

np.mean(A[A!=-999]) 

性能

让我们测试三个片段:普通 np.mean、masked_array 和使用 Python 生成器的“朴素”解决方案。数组有 1000000 个值。

from timeit import timeit 
setup = 'import numpy as np; a=np.arange(0, 1000000)' 
snippets = [ 
    'assert np.mean(a[a!=999999]) == 499999.0', 
    'm=np.ma.masked_array(a,a==999999); assert np.ma.mean(m) == 499999.0', 
    'assert sum(x for x in a if x != 999999)/999999 == 499999' 
] 
timings = [timeit(x, setup=setup, number=10) for x in snippets] 
print('\n'.join(str(x) for x in timings)) 

结果:

0.0840559005737 
0.0890350341797 
10.4104599953 

普通 np.mean 和 masked_array 的时间很接近,而“朴素”的解决方案要慢 100 多倍。