增加Numpy

时间:2016-09-03 14:02:50

标签: python numpy significant-digits

我想知道如何增加小数以外的有效位数。 原始的“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)

我意识到上面的操作会使数字非常小,但我仍然想要小数以外的数字出现

2 个答案:

答案 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不是一个分心的人。