使用Decimal列表的scipy.stats.pearsonr?
我在用 scipy.stats.pearsonr
这个函数处理两个 Decimal
类型的列表时,发现 scipy
不太高兴,出现了问题:
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'
有没有人遇到过这个问题,有什么解决办法吗?
1 个回答
0
这个错误的意思是,问题出在 pearsonr
函数试图对浮点数和十进制数进行数学运算,而Python不喜欢这样。你可以把十进制数的列表转换成浮点数来解决这个问题。
stats.pearsonr([float(val) for val in signals], [float(val) for val in prices])
虽然你在评论中提到想用十进制数来保持精确的格式,但实际上,浮点数的误差对你的结果影响不大。