2015-11-02 7 views
2

Я новичок, и я пытаюсь использовать регрессию из scipy. Я получаю сообщение об ошибке:ValueError: слишком много значений для распаковки Scipy

ValueError: слишком много значений для распаковки

когда я запускаю следующий код:

testArray1 = [1,2,3] 
testArray2 = [2,3,4] 
slope, intercept, r_value, std_err = scipy.stats.linregress(testArray1,testArray2) 
+2

Вы упускаете 'p_value' в вашем возвращении кортежа: http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.linregress.html – tzaman

+2

@tzaman прибил Это. Есть пять значений с правой стороны, но только четыре слева. Сообщение об ошибке информирует вас об этом несоответствии - но это, действительно, запутывает первый раз, когда вы сталкиваетесь с ним. – Prune

ответ

3

ищет ответ на ту же ошибку, у меня здесь, только что в моем случае я использовал немного более сложный ввод (маскированные массивы, подробно детализированные). Я отправляю свое решение здесь, если кому-то это понадобится.

В случае Масок Массивов (SciPy: Masked arrays), SciPy есть набор статистических функций, предназначенных для них: scipy.stats.mstats.

Например, пару списков массивов даст ту же ошибку при вызове scipy.stats.linregress:

from scipy import stats  

x = [array([4.04]), array([4.38])] 
y = [array([3.60]), array([4.03])] 

slope, intercept, r_value, std_err = scipy.stats.linregress(x,y) 

Traceback (most recent call last): 
    File "code.py", line 4, in <module> 
    slope, intercept, r, prob, sterrest = stats.linregress(x,y) 
    File ".../anaconda/lib/python3.4/site-packages/scipy/stats/_stats_mstats_common.py", line 79, in linregress 
    ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat 
ValueError: too many values to unpack (expected 4) 

Но использование stats.mstats.linregress() будет исправить:

from scipy import stats  

x = [array([4.04]), array([4.38])] 
y = [array([3.60]), array([4.03])] 

slope, intercept, r_value, std_err = scipy.stats.mstats.linregress(x,y)   
print(r**2) 

>>> 1.0 
Смежные вопросы