我想知道如何增加小数以外的有效位数。 原始的“rf”numpy数组包含浮点数。
import numpy as np
rf=daily_rets(df)
[ 7.11441183 7.12383509 7.13325787 7.16152716 7.17094994 7.17094994 7.18979692 7.18979692 7.19921923 7.19921923 7.19921923 7.19921923 7.19921923 7.19921923 7.19921923 7.20864296 7.20864296 7.20864296 7.20864296 7.20864296]
但是当我执行操作时,我得到了一个不受欢迎的输出
rf[0:]=(1+rf[0:]/100)**(1/252)
我得到以下输出 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1。 1。]
np.around()也没有帮我提供与上面相同的输出
rf[0:]=np.around((1+rf[0:]/100)**(1/252), decimals=6)
我意识到上面的操作会使数字非常小,但我仍然想要小数以外的数字出现
答案 0 :(得分:0)
在python 2.7中,将numpy float除以整数将返回一个整数,至少这是我的经验。 正如答案所说:
In [1]: import numpy as np
In [2]: rf = np.array([ 7.11441183, 7.12383509, 7.13325787, 7.16152716, 7.17
...: 094994, 7.17094994, 7.18979692, 7.18979692, 7.19921923, 7.19921923,
...: 7.19921923, 7.19921923, 7.19921923, 7.19921923, 7.19921923, 7.208
...: 64296, 7.20864296, 7.20864296, 7.20864296, 7.20864296])
In [3]: print (1+rf[0:]/100)**(1/252)
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1.]
In [4]: print (1+rf[0:]/100.0)**(1/252.0)
[ 1.00027276 1.00027311 1.00027346 1.00027451 1.00027486 1.00027486
1.00027556 1.00027556 1.00027591 1.00027591 1.00027591 1.00027591
1.00027591 1.00027591 1.00027591 1.00027626 1.00027626 1.00027626
1.00027626 1.00027626]
用浮点除法解决了这个问题,即将100和252都改为100.0和252.0。希望有所帮助。
答案 1 :(得分:0)
您可以使用https://github.com/emileb/OpenSSL-for-Android-Prebuilt/tree/master/openssl-1.0.2:
from __future__ import division
import numpy as np
rf = np.array([7.11441183, 7.12383509, 7.13325787, 7.16152716])
np.divide(rf[0:], 100, rf[0:])
np.add(rf[0:], 1, rf[0:])
np.power(rf[0:], 1 / 252, rf[0:])
>>> rf
array([ 1.00027276, 1.00027311, 1.00027346, 1.00027451])
>>>
最初我认为numpy会处理这个问题,但正如其他人所说的那样,导致问题的是v2.7整数除法。希望上面的ufunc不是一个分心的人。