如何用numpy.repeat构建递增值数组?薪资500年增1%实现问询
嘿,我来帮你搞定这两个numpy相关的问题~
问题2:用numpy替代循环生成薪资递增数组(每年10%涨幅)
首先说你关心的薪资问题:你原来的循环逻辑是让初始薪资500每年乘以1.1,执行15次。其实用numpy可以完全摆脱循环,而且效率更高。
如果你想结合numpy.arange和numpy.repeat来实现,思路是这样的:
- 先用
repeat生成对应次数的涨幅因子(也就是1.1) - 和初始薪资拼接成一个数组
- 用
cumprod计算累积乘积,就能得到逐年递增的薪资数组
具体代码如下:
import numpy as np salary_initial = 500 years = 15 # 对应你循环里的15次迭代 # 生成15个1.1的因子,和初始薪资拼接 factors = np.concatenate([[salary_initial], np.repeat(1.1, years)]) # 计算累积乘积,得到从初始薪资开始的所有年度薪资 salaries = np.cumprod(factors) # 如果你想要和循环打印结果完全一致的输出(也就是去掉初始的500),取后面的元素即可 print(salaries[1:])
当然,更简洁的方式是直接用arange生成指数,结合幂运算,不需要repeat也能搞定:
import numpy as np salary_initial = 500 years = 15 # 生成0到15的指数,计算1.1的对应幂次再乘以初始薪资 salaries = salary_initial * (1.1) ** np.arange(0, years + 1) print(salaries[1:]) # 同样取后面15个值对应循环的输出
这两种方法都比循环高效,尤其是当你需要生成大量数据的时候。
问题1:用numpy.repeat构建元素逐次递增1%的数组
这个问题的逻辑和薪资问题类似,只是涨幅变成了1%(也就是乘以1.01)。用repeat的实现思路如下:
假设你想要生成n个元素,初始值为initial_value:
import numpy as np initial_value = 100 # 自定义初始值 n = 10 # 想要生成的数组长度 # 拼接初始值和n-1个1.01的因子 factors = np.concatenate([[initial_value], np.repeat(1.01, n-1)]) # 累积乘积得到每个元素比前一个大1%的数组 result_array = np.cumprod(factors) print(result_array)
输出的数组会是[100, 101, 102.01, 103.0301, ...],完全符合你的要求。
同样,如果你不需要局限于用repeat,直接用幂运算会更简洁:
result_array = initial_value * (1.01) ** np.arange(n)
内容的提问来源于stack exchange,提问作者char_munger
相关产品推荐
相关产品推荐

