Вы вызываете kurtosis
на axis=0
по умолчанию ( см. Документы ), но похоже, что вы пытаетесь запустить его для всего массива. Так что вы можете попробовать axis=None
:
kurtosis(gray_img, axis=None)
Пример :
im = np.random.randint(0,256,(5,5))
>>> im
array([[104, 125, 26, 194, 47],
[198, 46, 105, 38, 241],
[211, 115, 62, 196, 169],
[ 92, 184, 212, 100, 117],
[212, 35, 208, 52, 3]])
>>> kurtosis(im)
array([-1.78890733, -1.32154862, -1.66900354, -1.74522902, -1.30434102])
>>> kurtosis(im, axis=None)
-1.3968689968948007
[РЕДАКТИРОВАТЬ] : Исходя из ваших комментариев, вы пытаетесь вычислить асимметрию, а не эксцесс. Для этого используйте:
from scipy.stats import kurtosis,skew
skew(gray_img, axis=None)
В matlab, в приведенном выше массиве ваш код (взятый непосредственно из ваших комментариев) дает:
im =
104 125 26 194 47
198 46 105 38 241
211 115 62 196 169
92 184 212 100 117
212 35 208 52 3
>> I2 = im2double(im);
>> s=skewness(I2(:))
s =
0.0118
В scipy
он дает:
>>> skew(im,axis=None)
0.011819746815198935
[Edit # 2] : По-видимому, * * * * * * * * * * * * * * * Scipy
по умолчанию Pearson's
по умолчанию *1029*. +1 к scipy
за то, что он более гибкий, чем MATLAB
! Таким образом, вы можете использовать:
kurtosis(im, None, fisher=False)
Чтобы получить те же результаты:
# Scipy:
>>> kurtosis(im,None, fisher=False)
1.6031310031051993
# Matlab:
>> s=kurtosis(I2(:))
s =
1.6031