增加 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 不会让人分心。
我想知道如何增加小数点后的有效数字位数。 原始"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 不会让人分心。