Применить U-тест Манна Уитни к многомерному массиву и заменить отдельные значения переменной массива данных xarray на Python? - PullRequest
1 голос
/ 30 января 2020

Я новичок в Python и мне нужна помощь с xarray. У меня есть два трехмерных массива данных (rlon, rlat, time) для будущего и прошлого климата. Я хочу вычислить критерий Манна-Уитни-U для каждой точки сетки, чтобы проанализировать значимость изменения температуры в будущем по сравнению с прошлым. Я уже получил работу Манна-Уитни-U-теста с выбором времени ser ie из одной точки сетки исторических и будущих данных каждый. Пример:

import numpy as np
import xarray as xr
import scipy.stats as sts

#selecting time period and grid point of past and future data

tp = fileHis['tas']
tf = fileFut['tas']
gridpoint_past=tp.sel(rlon=-6.375, rlat=1.375, time=slice('1999-01-01', '1999-01-31'))
gridpoint_future=tf.sel(rlon=-6.375, rlat=1.375, time=slice('2099-01-01', '2099-01-31'))

#mannwhintey-u-test

result=sts.mannwhitneyu(gridpoint_past, gridpoint_future, alternative='two-sided')
print('pvalue =',result[1])

Вывод: pvalue = 0.05922372345359562

Моя проблема сейчас заключается в том, что мне нужно сделать это для каждой точки сетки и каждого месяца, и в конце я хотел бы получить данные массив с pvalues ​​для каждой точки сетки и каждого месяца года. Я думал о том, чтобы пройтись по всем рлатам, рлонам и месяцам и запустить тест Манна-Уитни-U для каждого, если нет лучшего способа сделать это. И как я могу записать значения по одному в новый массив данных с тем же размером rlat, rlon? Я пробовал это, но это не работает: я создал массив данных pvalue_mon, который имеет те же rlat, rlon, что и tp и tf, и имеет 12 месяцев как временные шаги.

pvalue_mon.sel(rlon=-6.375, rlat=1.375, time=th.time.dt.month.isin([1])) = result[1] 
SyntaxError: can't assign to function call

или это:

pvalue_mon.sel(rlon=-6.375, rlat=1.375, time=pvalue_mon.time.dt.month.isin([1])).update(result[1])
TypeError: 'numpy.float64' object is not iterable

Как заменить одно значение существующей переменной?

1 Ответ

0 голосов
/ 31 января 2020

Вместо использования функции .sel () попробуйте использовать .loc [], как описано здесь: http://xarray.pydata.org/en/stable/indexing.html#assigning -значения с индексированием

...