Корреляционная матрица Пирсона в Python, ValueError - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь получить матрицу (широта, долгота) со значением коэффициента Пирсона для каждой точки сетки, для

x: 3D-массив данных (время, широта, долгота) (времяразмер равен 30)

y: вектор столбца DataArray с серией из 30 значений внутри

Поэтому я хотел бы рассчитать коэффициент Пирсона для каждого (широта, долгота) для вектора столбца 30элементы для x.

Я пытался:

corrmap = xr.DataArray(x2)
for i in range(len(corrmap['lat']))
     for j in range(len(corrmap['lon']))
          corrmap[i, j], p_value = pearsonr(x[:, i, j], y)

, но я получаю эту ошибку:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

, которую я не могу полностью понять по смыслу.Мой метод неверен?Должен ли я использовать другой тип кода для решения моей проблемы?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Проблема в том, что вы используете y, и он имеет два измерения, но Pearsonr не может справиться с этим.Укажите y[:,0] и все работает.То есть:

corrmap = np.zeros(((len(corrmap['lat']), len(corrmap['lon'])))

for i in range(len(corrmap['lat'])):
     for j in range(len(corrmap['lon'])):
          corrmap[i, j], p_value = pearsonr(x[:, i, j], y[:,0])

Также я бы просто использовал числовой массив для коэффициентов вместо xarray, по крайней мере, для получения значений, затем вы можете преобразовать его в xarray.

0 голосов
/ 09 апреля 2019

Предполагается, что вы используете scipy.stats.pearsonr .Аргументами PearsonR должны быть одномерные массивы.

Итак, перейдите к:

corrmap[i, j], p_value = pearsonr(x[:, i, j].ravel(), y)

Что делает ravel () - возвращает непрерывный сплюснутый массив, Numpy ravel ()

Здесь также немного контекста вокруг ошибки, которую вы получаете, оценка массива в логическом контексте .Другими словами, дополнительное измерение, вероятно, заставляет некоторые операции применяться к массиву вместо скаляра.Эта проблема имеет ту же природу, что и ваша: SO: PearsonR ValueError

...