【问题标题】:Increase the significant digits in Numpy增加 Numpy 中的有效数字
【发布时间】:2016-09-03 14:02:49
【问题描述】:

我想知道如何将有效位数增加到小数点后。 原始的“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 division的可能重复
  • 在 Python 3 中,这是我在前四个元素上应用(1+rf[0:]/100)**(1/252) 得到的结果:array([ 1.00027276, 1.00027311, 1.00027346, 1.00027451]) 你的问题是因为整数除法。您可以使用 floats (1+rf[0:]/100.0)**(1/252.0) 或链接问题中的其他方法来修复它。
  • 问题依然存在。我尝试了你的建议,我得到了相同的输出
  • Nagesh,您是否将100 更改为100.0 252 更改为252.0?实际上,rf 中的值是浮点数,因此将100 更改为100.0 应该没有什么区别。 (使用 Python 2 时,您可以通过始终将 from __future__ import division 放在 Python 文件的顶部来避免将来出现此类问题。)
  • @ayhan 问题已得到纠正。我犯了一个错误,没有把250改成250.0,给您带来的不便,敬请见谅。

标签: python numpy significant-digits


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以使用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 不会让人分心。

    【讨论】:

    • 这仍然包含表达式1/252,在Python 2中为0。你使用的是Python 3吗?
    • @WarrenWeckesser:我自欺欺人,我的临时文件顶部有 from __future__ import division。已更正 - 但 ufunc 没有实际意义。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多