2011-08-25 72 views
1

首先我是python和编程新手,但你们已经帮了我很多,非常感谢!但我遇到了一个问题,目前为止还没有找到答案:计算几个numpy蒙面数组的平均值(masked_all)

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

当我只需要绘制一个板,我会做这样的:

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) 

这工作不错,但有一个问题我不能解决。正如我所说有时一些盘子没有得到所有的数据,因此在情节的某些地方有一个“洞”。现在我的意志矩阵有一个整体,即使其他所有的板块都有数据,整个板块都有一个整体。

我怎样才能确保我不会弄到这些漏洞,或者是否有更平滑的方式让我的“意义矩阵”? (我希望我的问题是不够清楚......)

编辑:

的问题是不是我没有得到数据的平均值,这实际工作(当然我不喜欢我怎么样这样做,但它的工作原理),问题是我得到了我之前描述的这些“漏洞”。这是困扰我的东西。

回答

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数组时,出现了错误...(“愚蠢是愚蠢的做法”) 如果有人有更好的方法来获得每个单一点上所有盘子的平均值,那么阅读它会很好。

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数据结构。

+0

欢迎来到Python和编程!以下是我如何使用IPython自动完成和文档找到答案。 'X. '会显示所有与X相关的方法。一旦找到了'mean',那么'X.mean?'将显示'mean'的文档。 'ma','masked_array'等也是如此 –

+0

感谢但不幸的是它没有工作,我得到一个错误:“文件”C:\ Python26 \ lib \ site-packages \ numpy \ ma \ core。py“,第1695行,在_check_mask_axis中 return mask.all(axis = axis) ValueError:axis(= 2)outbounds”如果我设置axis = 1或者不传递任何参数pcolormesh失败。而我其实认为错误在于填满所有牌匾... – Danny

+0

也感谢你的诀窍。我刚刚编辑了我的问题,希望我能更清楚一点。 – Danny