【问题标题】:Write function for exponential aggregation using R/Python [closed]使用 R/Python 编写指数聚合函数 [关闭]
【发布时间】:2021-01-15 03:52:42
【问题描述】:
Input -->[10,20,30,40,50]  
Desired Output  ---> [10,19.21,56.51,110.83,181.14] 
 
**Calculation**  
10-->10  
20-->20*exp(-0.04)  
30-->30*exp(-0.04)+((30*exp(-0.04))*exp(-0.04))  
40--->40*exp(-0.04)+((40*exp(-0.04))*exp(-0.04))+(((40*exp(-0.04))*exp(-0.04))*exp(-0.04)))

附上计算表,方便理解

请帮助我编写函数来使用 R 和 python 代码解决上述问题

【问题讨论】:

  • 问题应该提供可重复的输入,专注于单一语言,并以您最佳尝试的语言显示代码。请阅读r标签顶部的说明。

标签: python r function aggregation exp


【解决方案1】:

不确定如何在 R 中执行此操作,但在 Python 中非常简单。为此,您需要numpy 才能获得-0.04 的指数。

import numpy as np

def data_agg(data):
    results = []
    exp = np.exp(-0.04)
    for num in data:
        iters = (num // 10) - 1
        if iters == 0:
            results.append(num)
        else:
            tmp = 0
            while iters > 0:
                tmp += num * pow(exp, iters)
                iters -= 1
            results.append(round(tmp, 3))
    return results

data_agg(data)

>> [10, 19.216, 56.517, 110.833, 181.149]

【讨论】:

  • 第一个数字不是10怎么改
  • 将其从 10 更改为 min(data)
【解决方案2】:

对我来说,这个问题感觉更像是一个数学问题而不是编程问题?无论如何,这是一个 R 解决方案:

exp_agg <- function(vect, rate) {
  n <- seq_along(vect) - 1
  m <- exp(-rate) * (1 - exp(-rate * n)) / (1 - exp(-rate))
  vect * c(1, m[-1L])
}

输出:

exp_agg(c(10, 20, 30, 40, 50), 0.04)

[1]  10.00000  19.21579  56.51717 110.83305 181.14850

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多