2014-09-10 5 views
0

Попытка запустить scipy.stats.pearsonr с двумя списками Decimal делает scipy несчастным:scipy.stats.pearsonr со списками Decimals?

print type(signals) 
print type(signals[0]) 
print type(prices) 
print type(prices[0]) 

<type 'list'> 
<class 'decimal.Decimal'> 
<type 'list'> 
<class 'decimal.Decimal'> 

correlation = stats.pearsonr(signals, prices) 

Traceback (most recent call last): 
    File "commod.py", line 74, in <module> 
    main() 
    File "commod.py", line 69, in main 
    correlation = stats.pearsonr(signals, prices) 
    File "/home/.../venv/local/lib/python2.7/site-packages/scipy/stats/stats.py", line 2445, in pearsonr 
    t_squared = r*r * (df/((1.0 - r) * (1.0 + r))) 
TypeError: unsupported operand type(s) for -: 'float' and 'Decimal' 

Любой запустить в решение для этого?

+0

Конвертировать все в 'float'? – NPE

+0

Вот что я делаю сейчас, но я бы хотел этого избежать, поскольку я работаю с данными о ценах, которые (я считаю) всегда следует рассматривать в точном формате, таком как 'Десятичный' –

ответ

0

Как следует из этой ошибки, проблема возникает из-за того, что функция pearsonr пытается запустить арифметические операции с float и decimal, а python это не нравится. Вы можете, однако, преобразовать десятичный список в поплавки -

stats.pearsonr([float(val) for val in signals], [float(val) for val in prices]) 

Даже если в комментариях вы упомянули, что вы хотите использовать Decimal для точного формата, ошибки с плавающей запятой вряд ли будут изменить результаты.

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