计算多个numpy掩码数组的均值(masked_all)

1 投票
2 回答
1418 浏览
提问于 2025-04-17 00:19

首先,我是新手,刚开始学习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)

这个方法效果还不错,但有一个问题我解决不了。正如我所说,有时候某些板的数据不完整,因此在图上某些位置会出现“空洞”。现在我的平均矩阵在任何一块板有空洞的地方也会有空洞,即使其他板在那个位置有数据。

我该如何确保不会出现这些空洞,或者有没有更好的方法来得到我的“平均矩阵”?(希望我的问题说得够清楚……)

编辑:

问题不是我不能得到数据的平均值,这个其实是可以的(虽然我不太喜欢我做的方法,但它有效),问题是我之前提到的那些“空洞”。这让我很困扰。

2 个回答

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

好的,我找到了一个答案:

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数组相加的时候可能出错了...(“傻人做傻事”)。如果有人有更好的方法来计算每个位置上所有盘子的平均值,能分享一下就太好了。

撰写回答