【问题标题】:Indexing and doing mathematical calculation with Numpy Arrays Python使用 Numpy Arrays Python 进行索引和数学计算
【发布时间】:2021-10-04 18:36:21
【问题描述】:

下面的代码计算从 100 开始的Compounding 值和百分比增益gains。我想编写一个代码,从整个增益数组[20,3,4,55,6.5] 开始,最后得到212.19,然后取出第一个索引并重新计算复合值[3,4,55,6.5],得到176.82。,它将一直执行此操作,直到增益数组 [6.5] 结束。我怎样才能在下面的代码中实现这一点并获得预期的输出?

import numpy as np 
Amount = 100

def moneyrisk(array):
    for counter,iterator in enumerate(array):
        Compounding = Amount * np.cumprod(array / 100 + 1)
    return Compounding

gains= np.array([20,3,4,55,6.5])
print(moneyrisk(gains))

预期输出:

[212.194008, 176.82834, 171.678, 165.075, 106.5]

【问题讨论】:

    标签: arrays python-3.x numpy for-loop indexing


    【解决方案1】:

    您可以重复该数组以创建一个方阵,然后删除下三角形,将您的函数应用于每一行。最后,提取最后一列:

    您的moneyrisk 函数由:

    >>> f = lambda x: 100*np.cumprod(x/100 + 1, 1) # notice the axis=1 option
    

    重复行:

    >>> rep = gains[None].repeat(len(gains), 0)
    array([[20. ,  3. ,  4. , 55. ,  6.5],
           [20. ,  3. ,  4. , 55. ,  6.5],
           [20. ,  3. ,  4. , 55. ,  6.5],
           [20. ,  3. ,  4. , 55. ,  6.5],
           [20. ,  3. ,  4. , 55. ,  6.5]])
    

    使用np.triu 删除下三角:

    >>> rep_t = np.triu(rep, k=0)
    array([[20. ,  3. ,  4. , 55. ,  6.5],
           [ 0. ,  3. ,  4. , 55. ,  6.5],
           [ 0. ,  0. ,  4. , 55. ,  6.5],
           [ 0. ,  0. ,  0. , 55. ,  6.5],
           [ 0. ,  0. ,  0. ,  0. ,  6.5]])
    

    应用f 并选择最后一列:

    >>> f(rep_t)
    array([[120.      , 123.6     , 128.544   , 199.2432  , 212.194008],
           [100.      , 103.      , 107.12    , 166.036   , 176.82834 ],
           [100.      , 100.      , 104.      , 161.2     , 171.678   ],
           [100.      , 100.      , 100.      , 155.      , 165.075   ],
           [100.      , 100.      , 100.      , 100.      , 106.5     ]])
    
    >>> f(rep_t)[:, -1]
    array([212.194008, 176.82834 , 171.678   , 165.075   , 106.5     ])
    

    【讨论】:

    • 您好,我还有一个与此相关的问题。我想得到复利计算中的最小值,看看它是否低于大写Amount如果你能看一下我会很感激stackoverflow.com/questions/68612619/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多