У меня есть массив 5000*5000
numpy, на котором я хочу рассчитать Kurtosis для окон размером 25. Я попытался поместить функцию curtsus scipys в generic_filter
, найденную в ndimage.filters
, например:
import numpy as np
from scipy.stats import kurtosis
from scipy.ndimage.filters import generic_filter
mat = np.random.random_sample((5000, 5000))
kurtosis_filter = generic_filter(mat, kurtosis, size=25, mode='reflect')
Это никогда не заканчивается, и я не уверен, что он дает правильный ответ. Поэтому мой первый вопрос заключается в том, что это правильный способ использования generic_filter
с функцией scipy. Если это было правильно, то это слишком медленно для меня, чтобы оно было мне полезно. Итак, мой следующий вопрос будет, если есть более быстрый способ достичь этого? Например, думая о стандартном отклонении, вы можете просто сделать что-то вроде:
usual_mean = uniform_filter(mat, size=25, mode='reflect')
mean_of_squared = uniform_filter(np.multiply(mat,mat), size=25, mode='reflect')
standard_deviation = (mean_of_squared - np.multiply(usual_mean,usual_mean))**.5
Это быстро вспыхивает и просто исходит из того, что $\ sigma ^ 2 = E [(X -\mu) ^ 2] = E [X ^ 2] - (E [X]) ^ 2 $.