Применение по оси numpy (построчная корреляция каждой пары строк между двумя массивами с NaN) - PullRequest
0 голосов
/ 17 июня 2020

У меня есть функция f(x,y), которая принимает два одномерных массива и возвращает скаляр.

Если у меня есть двумерная матрица формы (M,N), как мне эффективно применить эту функцию попарно поперек оси 0, чтобы получить квадрат симметрии c результат формы (M, M)?

Изменить:

Я пытаюсь вычислить попарную корреляцию массива 1d массивы:

def f(x, y):
    sigma_x_y = np.nanstd(x) * np.nanstd(y)
    covariance = np.nanmean((x-np.nanmean(x))*(y-np.nanmean(y)))
    return covariance/sigma_x_y

1 Ответ

1 голос
/ 17 июня 2020

Думаю, это то, что вы ищете. Уравнения аналогичны вашей функции f (x, y):

x_m = x - np.nanmean(x,axis=1)[:,None]
y_m = y - np.nanmean(y,axis=1)[:,None]

X = np.nansum(x_m**2,axis=1)
Y = np.nansum(y_m**2,axis=1)

corr = np.dot(x_m,y_m.T)/np.sqrt(np.dot(X[:,None],Y[None]))

EDIT : если вы sh игнорируете значения NaN при вычислении корреляции из двух строк, просто замените последнюю строку на это:

corr = np.dot(np.nan_to_num(x_m), np.nan_to_num(y_m).T)/np.sqrt(np.dot(X[:,None],Y[None]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...