使用百分比增量创建的numpy范围

时间:2017-07-21 10:11:57

标签: pandas numpy

我想创建一个从startstop的numpy范围,使用基于前一个数字的(固定)百分比增量,例如start = 100 increment = 2%得到100,102,104.04 ,106.12等

显然,这可以通过迭代列表来完成,或者更优雅地使用生成器来完成:

def pct_incrementer(start, stop, step_pct):
    val = start
    yield val
    while True:
        val += val * step_pct
        if val >= stop:
            break
        yield val

 np.array(list(pct_incrementer(100, 200, 0.02)))
 # or (as I've just learned!)
 np.fromiter(pct_incrementer(100, 200, 0.02), float)  

numpy(或pandas)是否具有本机执行此功能的功能? (因为我找不到一个!)。有没有,也许是一种操纵np.array([100] * 10)来做同样事情的方法?

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用fullcumprod

xs = 100 * np.full(np.log(2.0)/np.log(1.02),1.02).cumprod()

答案 1 :(得分:0)

import numpy as np
start = 120
end = 255
display=[start]
 while True:
    xs1 = start * np.full(1,1.02).cumprod()
    if xs1.item(0)>=end:
        break
    else:
        display.append(xs1.item(0))
        start=xs1.item(0)
display = [ round(elem, 2) for elem in display ]
print(display)

#Result: [120, 122.4, 124.85, 127.34, 129.89, ... 254.68]

此方法快20到40倍。希望这会有所帮助:)

答案 2 :(得分:-1)

xs = 100 * np.full(np.log(2.0)/np.log(1.02),1.02).cumprod()

现在似乎抛出错误:

  

TypeError'numpy.float64'对象不能解释为整数

更新为:

xs = 100 * np.full(int(np.log(2.0)/np.log(1.02)),1.02).cumprod()

或更简洁地说:

xs1 = 100 * np.full(5,1.02).cumprod()

结果

array([102. , 104.04  , 106.1208  , 108.243216  , 110.40808032])