Код: Выделить всё
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.
Мой вопрос: Как я могу вычислить статистику регрессии для каждого пикселя в большом многомерном массиве (300 x 3000 x 3000) содержащий множество значений NaN достаточно быстрым векторизованным способом?
Желаемый результат: Массив значений статистики регрессии 3 x 3 (например, R-квадрат) для каждого пикселя в y_array, даже если этот пиксель содержит значения NaN в какой-то момент временного ряда
Подробнее здесь: https://stackoverflow.com/questions/521 ... onal-array