如何使用numpy生成按固定累计百分比递增的数值列表?
生成固定复利递增序列的实现方案
Numpy 内置实现
numpy 有两种常用的内置方案可以直接实现这个需求,性能远高于纯Python循环,适合长序列场景:
方法1:使用np.cumprod(可读性更高)
核心逻辑是先生成每一期的增长因子,累计乘积后乘以基准值:
import numpy as np base = 100 growth_rate = 0.05 n_length = 4 # 生成序列的长度,包含基准值 # 生成增长因子序列,首项为1对应基准值 factors = np.cumprod(np.full(n_length - 1, 1 + growth_rate)) factors = np.insert(factors, 0, 1) result = (factors * base).round(2) print(result) # 输出:[100. 105. 110.25 115.76] # 如果需要和示例一致截断为两位小数,可以用np.floor(factors * base * 100) / 100 得到[100. 105. 110.25 115.75]
方法2:使用np.logspace(代码更简洁)
直接通过等比数列生成工具实现,不需要额外拼接首项:
result = base * np.logspace(0, n_length -1, num=n_length, base=1 + growth_rate)
无依赖的纯Python实现
如果不需要处理超长序列,也可以用纯Python实现,不需要安装第三方库:
base = 100 growth_rate = 0.05 n_length = 4 # 列表推导实现,代码简洁 result = [round(base * (1 + growth_rate)**i, 2) for i in range(n_length)] print(result) # 输出:[100, 105, 110.25, 115.76]
如果序列长度非常大,递推实现比指数运算性能更好:
result = [] current = base for _ in range(n_length): result.append(round(current, 2)) current *= (1 + growth_rate)
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

