Scipy Stats Wilcoxon X и Y должны быть одномерной ошибкой - PullRequest
0 голосов
/ 24 января 2020

Я делю переменную 'cnt' на два набора на основе значения в значении 'yr', чтобы сравнить их с помощью критерия суммы рангов Уилкоксона. Я продолжаю получать сообщение об ошибке «Образцы x и y должны быть одномерными». Может кто-нибудь помочь мне разобраться, как это исправить? Я определил два массива cnt_yr0 и cnt_yr1, которые являются массивами 1xn.

#Here is some of my code:
from scipy import stats as sc

cnt_yr0 = np.transpose(np.array(data.loc[data['yr']==0,['cnt']]))
cnt_yr1 = np.transpose(np.array(data.loc[data['yr']==1,['cnt']]))
print(cnt_yr0)
print(cnt_yr1)


#binary predictors with continuous response
print(sc.wilcoxon(cnt_yr0,cnt_yr1))

[[16 40 32 ... 52 38 31]]
[[48 93 75 ... 90 61 49]]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-145-16e4c5da6eb0> in <module>
      9 
     10 #binary predictors with continuous response
---> 11 print(sc.wilcoxon(cnt_yr0,cnt_yr1))
     12 print(sc.wilcoxon(np.array(data['holiday']),np.array(data['cnt'])))
     13 print(sc.wilcoxon(np.array(data['workingday']),np.array(data['cnt'])))

~\Anaconda3\lib\site-packages\scipy\stats\morestats.py in wilcoxon(x, y, zero_method, correction, alternative)
   2844         x, y = map(asarray, (x, y))
   2845         if x.ndim > 1 or y.ndim > 1:
-> 2846             raise ValueError('Samples x and y must be one-dimensional.')
   2847         if len(x) != len(y):
   2848             raise ValueError('The samples x and y must have the same length.')

ValueError: Samples x and y must be one-dimensional.

1 Ответ

0 голосов
/ 24 января 2020

Данный массив является двухмерным, и функция принимает только одномерные массивы

np.array([[16, 40, 32, 52, 38, 31]]).shape

(1,6)

Но вы можете удалить это второе измерение с помощью indexing или array.flatten ()

np.array([[16, 40, 32, 52, 38, 31]])[0,:].shape

(6,)

np.array([[16, 40, 32, 52, 38, 31]]).flatten().shape

(6,)

Вы также можете проверить с помощью ndim, чтобы получить количество измерений:

np.array([[16, 40, 32, 52, 38, 31]]).flatten().ndim

1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...