Как применить линейную регрессию к каждому пикселю в большом многомерном массиве, содержащем NaN?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как применить линейную регрессию к каждому пикселю в большом многомерном массиве, содержащем NaN?

Сообщение Anonymous »

У меня есть одномерный массив значений независимых переменных (), которые соответствуют временным шагам в трехмерном массиве пространственных данных с несколькими временными шагами (

Код: Выделить всё

y_array). Мои фактические данные намного больше: более 300 временных шагов и до 3000 * 3000 пикселей:

import numpy as np
from scipy.stats import linregress

# Independent variable: four time-steps of 1-dimensional data
x_array = np.array([0.5, 0.2, 0.4, 0.4])

# Dependent variable: four time-steps of 3x3 spatial data
y_array = np.array([[[-0.2,   -0.2,   -0.3],
[-0.3,   -0.2,   -0.3],
[-0.3,   -0.4,   -0.4]],

[[-0.2,   -0.2,   -0.4],
[-0.3,   np.nan, -0.3],
[-0.3,   -0.3,   -0.4]],

[[np.nan, np.nan, -0.3],
[-0.2,   -0.3,   -0.7],
[-0.3,   -0.3,   -0.3]],

[[-0.1,   -0.3,   np.nan],
[-0.2,   -0.3,   np.nan],
[-0.1,   np.nan, np.nan]]])
Я хочу вычислить попиксельную линейную регрессию и получить R-квадрат, P-значения, точки пересечения и наклоны для каждого пикселя xy в y_array code> со значениями для каждого временного шага в x_array в качестве моей независимой переменной.

Я могу изменить форму, чтобы получить данные в форме для ввода их в np.polyfit, который векторизуется быстро:

Код: Выделить всё

# Reshape so rows = number of time-steps and columns = pixels:
y_array_reshaped = y_array.reshape(len(y_array), -1)

# Do a first-degree polyfit
np.polyfit(x_array, y_array_reshaped, 1)
Однако при этом игнорируются пиксели, содержащие любые значения NaN (

Код: Выделить всё

np.polyfit
не поддерживает значения NaN) и не вычисляет необходимую мне статистику (R-квадрат, P-значения, точки пересечения и наклоны).

В ответе здесь используется scipy.stats import linregress, который рассчитывает необходимую мне статистику и предлагает избегать проблем с NaN, маскируя эти NaN значения. Однако этот пример предназначен для двух одномерных массивов, и я не могу понять, как применить аналогичный подход к маскированию в моем случае, когда каждый столбец в y_array_reform будет иметь другой набор значений NaN.< /p>

Мой вопрос: Как я могу вычислить статистику регрессии для каждого пикселя в большом многомерном массиве (300 x 3000 x 3000), содержащем множество NaN code> достаточно быстрым векторизованным способом?

Желаемый результат: Массив 3 x 3 значений статистики регрессии (например, R-квадрат ) для каждого пикселя в y_array, даже если этот пиксель содержит значения NaN в какой-то момент временного ряда

Подробнее здесь: https://stackoverflow.com/questions/521 ... onal-array
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»