高效通过向量化方案为可变长一维numpy数组填充对应范围随机数
高效向量化实现方案
核心逻辑完全基于numpy原生向量化操作,无Python层面循环,性能拉满:
- 每个1索引位置
i的取值范围是[i, n],区间可选整数个数为n - i + 1 - 先生成对应每个位置的、范围在
[0, 区间长度-1]的随机偏移量 - 偏移量叠加对应区间的起始值
i,直接得到符合要求的结果
实现代码
import numpy as np def generate_custom_array(n): # 生成各位置对应的随机偏移量 rand_offset = np.random.randint(0, n - np.arange(n), size=n) # 偏移量加区间起始值得到最终结果 return rand_offset + np.arange(1, n + 1)
验证示例
以n=5为例,运行函数得到的某组输出为:
array([2, 3, 4, 5, 5])
逐位校验符合要求:
- 第1位
2∈ [1,2,3,4,5] - 第2位
3∈ [2,3,4,5] - 第3位
4∈ [3,4,5] - 第4位
5∈ [4,5] - 第5位
5∈ [5]
性能说明
该方案时间复杂度为O(n),仅调用numpy底层优化的运算接口,n=1e6量级的场景下也可在几毫秒内完成运算,相比循环实现性能提升100倍以上。如需复现随机结果,调用函数前执行np.random.seed(自定义种子值)即可。
内容的提问来源于stack exchange,提问作者José
相关产品推荐
相关产品推荐

