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

Pandas 使用百分比增量创建的numpy范围,pandas,numpy,Pandas,Numpy,我想创建一个从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

我想创建一个从
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(或熊猫)是否有一种天生的功能来做到这一点??(因为我找不到!)。是否有一种方法可以操纵
np.array([100]*10)
来做同样的事情


谢谢

您可以使用
full
cumprod

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])

这种方法的速度要快20-40倍。希望这有帮助:)

这是一个简洁的答案。。。我有一种感觉,会有一些圆木的诡计来做这件事。谢谢。不过,我要指出,(使用%timeit)我的np.fromiter(pct_incrementer())比使用公认的少量值100-200@2%@user908094的.full()/、cumprod()快得多。这很有趣。此外,在我的机器上,大部分减速来自
*100
。一些谷歌搜索显示了可能有用的
np.logspace
np.geomspace
。我看过这些函数(以及np.linspace),我想我希望有一个函数可以传递一个lambda来描述“进程”。。。实现起来相当复杂(不可能?)。应该选择这一点作为正确答案。
array([102. , 104.04  , 106.1208  , 108.243216  , 110.40808032])
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]