我想创建一个从start
到stop
的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)
来做同样事情的方法?
谢谢!
答案 0 :(得分:0)
您可以使用full
和cumprod
:
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])