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]