Py学习  »  Python

如何找到这个数组的平均值,但仅限于python中不等于零的值

Anonymous • 3 年前 • 1400 次点击  

数组([1500、1520、1540、1590、1590、1600、1600、1560、1560、1560、1580、, 1520, 1460, 1510, 1520, 1320, 1320, 1300, 1300, 1320, 1320, 1320, 1320, 1300, 1300, 1340, 1300, 1300, 1300, 1400, 1480, 1360, 1420, 1480, 1580, 1530, 1500, 1480, 1480, 1480, 1460, 1540, 1490, 1480, 1480, 1520, 1500, 1460, 1480, 1480, 1500, 1500, 1600, 1540, 1480, 1460, 1560, 1600, 1560, 1600, 1600, 1600, 1620, 1600, 1580, 1600, 1700, 1620, 1620, 1620, 1700, 1700, 1680, 1640, 1620, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1600, 1680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0],dtype=int64)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133112
文章 [ 3 ]  |  最新文章 3 年前
Heidi Hussein
Reply   •   1 楼
Heidi Hussein    3 年前

这里有一个简单的方法,就是只复制一个不带零的数组,然后计算平均值,方法如下:

import numpy as np
new_array = array[array!=0] #Create a copy of the array excluding the zeros
avg = np.average(new_array)

这里还有一个不使用任何numpy方法的想法:

count=0
total=0
for number in array:
    if number != 0:
        total+=number #adds the non-zero values together
        count+=1      #counts the non-zero values
avg= total/count
Nin17
Reply   •   2 楼
Nin17    3 年前

你可以通过列表理解和numpy来做到这一点:

import numpy as np
a = np.array([1500, 1520, 1540, 1590, 1590, 1600, 1600, 1560, 1560, 1560, 1580,
              1520, 1460, 1510, 1520, 1320, 1320, 1300, 1300, 1320, 1320, 1320, 1320,
              1300, 1300, 1340, 1300, 1300, 1300, 1400, 1480, 1360, 1420, 1480,
              1580, 1530, 1500, 1480, 1480, 1480, 1460, 1540, 1490, 1480, 1480,
              1520, 1500, 1460, 1480, 1480, 1500, 1500, 1600, 1540, 1480, 1460,
              1560, 1600, 1560, 1600, 1600, 1600, 1620, 1600, 1580, 1600, 1700,
              1620, 1620, 1620, 1700, 1700, 1680, 1640, 1620, 1670, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1670, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1600, 1680, 0, 0, 0, 0,
              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
              0, 0, 0], dtype=np.int64)

np.mean([i for i in a if i])

输出:

1508.4810126582279
Chinny84
Reply   •   3 楼
Chinny84    3 年前

你可以过滤数组

arr = np.array([41, 42, 43, 44, 0, 0,0])
arr.mean() # 24.2857
arr[arr != 0].mean() # 42.5 

编辑: (!=由于@tdelaney,包含负数)