Мне нужно создать быструю python реализацию простой оболочки для функции scipy.stats
. Эта функция принимает только векторы, а не матрицы. Оболочки ниже являются двумя реализациями, но оба имеют одинаковое время выполнения. Можно ли ускорить выполнение любого из них, не перемещая реализацию в домен C / C ++.
import numpy as np
from scipy.stats import kendalltau
def wrap1(X, y):
corr = []
p_value = []
X = np.array(X).transpose()
y = np.ravel(y)
for col in X:
ktau = kendalltau(col, y, nan_policy='raise')
corr.append(ktau[0])
p_value.append(ktau[1])
return corr, p_value
##########Version2
def wrap2(X, y):
X = np.array(X).transpose()
y = np.tile(np.ravel(y), (X.shape[0], 1))
corr, p_value = zip(*[kendalltau(a, b, nan_policy='raise')
for a, b in zip(X, y)])
return corr, p_value
Пример выполнения:
t1 = np.arange(30).reshape(10,3)
t2 = np.arange(10).reshape(10,)
wrap1(t1,t2)
wrap2(t1,t2)
Большое спасибо