增加 Numpy 中的有效数字

Increase the significant digits in Numpy

我想知道如何增加小数点后的有效数字位数。 原始"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.]

np.around() 也无助于给我与上面相同的输出

rf[0:]=np.around((1+rf[0:]/100)**(1/252), decimals=6)

我意识到上面的操作会使数字变得很小,但我还是希望出现小数点后的数字

在 python 2.7 中,将一个 numpy 浮点数除以一个整数将 return 一个整数,至少这是我的经验。 正如答案所说:

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。希望对您有所帮助。

你可以只使用 numpy ufuncs:

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 不会让人分心。