Код: Выделить всё
x_array
Код: Выделить всё
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]]])
Я могу изменить форму, чтобы получить данные в форме для ввода их в 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)
Код: Выделить всё
np.polyfit
В ответе здесь используется 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