вычисление среднего значения для нескольких массивов с масками (masked_all) - PullRequest
1 голос
/ 25 августа 2011

Прежде всего, я новичок в 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)

Это работает довольно хорошо, но есть одна проблема, которую я не могу решить. Как я сказал, иногда некоторые планшеты не получают всех данных, поэтому в некоторых точках на графике есть «дыры». Теперь у моей средней матрицы есть целое, где когда-либо одна из пластин имела целое, даже если у всех остальных были данные в этом месте.

Как я могу убедиться, что я не получу эти дыры или есть даже более плавный способ получения моей "средней матрицы" ?? (Надеюсь, мой вопрос достаточно ясен ...)

Edit:

Проблема не в том, что я не получаю среднее значение данных, это на самом деле работает (ну, мне не нравится, как я это сделал, но это работает), проблема в том, что я получаю эти "дыры", которые я описал до. Вот что меня беспокоит.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

РЕДАКТИРОВАТЬ: Извините, я неправильно истолковал вопрос.Попробуйте это:

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 голосов
/ 26 августа 2011

Хорошо, я получил ответ:

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 ... («Глупый, как глупый») Если у кого-то есть лучший способ получить среднее значение всех тарелок в каждом отдельном месте, было бы неплохо прочитать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...