计算几个numpy蒙面数组的平均值(masked_all)

时间:2011-08-25 08:05:31

标签: python numpy

首先我是python和编程的新手,但你们已经帮了我很多,所以非常感谢!但是我遇到了一个问题,到目前为止我还没有找到答案:

我有几个平板的数据,其中数据代表每个平板上大量不同点的压力。问题是,由于传感器测量压力,这些板不是完美的圆形,有时这些传感器甚至会产生错误,所以我在板内的某个位置没有任何数据。

当我只需要绘制一个盘子时,我会这样做:

import numpy.ma as ma    

matrix=ma.masked_all((160,65),float)
for x in range(len(plate.X)):
    matrix[(plate.Y[x],plate.X[x])]=data.index(plate.measurementname[x])
image.pcolormesh(matrix,min,max)

这很好用。现在我有几个板块,我想绘制每个点的平均压力。因为我不知道任何平均功能,我想把所有的盘子加在一起并除以盘子的数量......我试着跟着:

import numpy.ma as ma    

meanmatrix=ma.masked_all((160,65),float)
for plate in plateslist:
    matrix=ma.masked_all((160,65),float)
    for x in range(len(plate.X)):
        matrix[(plate.Y[x],plate.X[x])]=data.index(plate.measurementname[x])
    meanmatrix+=matrix
meanmatrix=meanmatrix/len(plateslist)
image.pcolormesh(meanmatrix,min,max)

这很好用,但有一个问题我无法解决。正如我所说,有时一些板块没有得到所有数据,因此在图中的某些位置有一个“洞”。现在我的meanmatrix有一个整体,其中一个板块有一个整体,即使所有其他人都有那个位置的数据。

我怎样才能确保我不会得到这些漏洞,或者是否有更平滑的方式来获取我的“平均矩阵”? (我希望我的问题很清楚......)

编辑:

问题不在于我没有得到数据的意思,这实际上是有效的(我不喜欢我是怎么做的但是它有效),问题是我得到了这些“漏洞”我描述之前。这就是困扰我的。

2 个答案:

答案 0 :(得分:1)

编辑:对不起,我误解了这个问题。试试这个:

allplates = ma.masked_all((160, 65, numplates))
# fill in allplates
meanplate = allplates.mean(axis=2)

这将计算阵列最后一维的平均值,即将板平均在一起。遗漏的值将被忽略。


早期回答:你可以采用蒙面数组的平均值,它会忽略缺失值:

>>> X = ma.masked_all((160, 65))
>>> X.mean()
masked
>>> X[0, 0] = 1
>>> X.mean()
1.0

尽量避免使用matrix作为变量名,因为它也引用了NumPy数据结构。

答案 1 :(得分:0)

好的,我得到了答案:

import numpy.ma as ma    

allplats=ma.masked_all((160,65),float)
for plate in plateslist:
    for x in range(len(plate.X)):
        allplates[(plate.Y[x],plate.X[x])]+=data.index(plate.measurementname[x])
allplates=allplates/len(plateslist)
image.pcolormesh(meanmatrix,min,max)

这实际上有效!所以我想在添加两个masked_all数组时出现了错误...(“Stupid就像愚蠢一样”) 如果有人有更好的方法来获得每个单位的所有板块的平均值,那么阅读它会很好。