You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用纯向量化方法为numpy数组每个元素生成指定长度的连续序列

实现方案

完全向量化的实现不需要任何Python级循环,核心思路是生成重复的基底数组 + 逐段偏移量相加,具体代码如下:

import numpy as np

# 示例输入
a = np.array([10,9,12])
ranges = np.array([2,4,3])

# 1. 生成基底数组:将a的每个元素按对应ranges值重复
base = np.repeat(a, ranges)

# 2. 生成完全向量化的偏移数组
cum_len = np.cumsum(ranges)
offsets = np.ones(cum_len[-1], dtype=int)
offsets[0] = 0
offsets[cum_len[:-1]] = -ranges[:-1] + 1
offsets = offsets.cumsum()

# 3. 相加得到最终结果
res = base + offsets
print(res)
# 输出:[10 11  9 10 11 12 12 13 14]
原理解释
  • np.repeat(a, ranges) 输出长度和最终结果一致,每个位置是对应区间的起始值,示例中输出为 [10 10 9 9 9 9 12 12 12]
  • 偏移量生成部分通过numpy前缀和、索引赋值、累积求和实现,全程无Python层循环,每个区间的偏移值从0开始递增到区间长度-1,示例中输出为 [0 1 0 1 2 3 0 1 2]
  • 两者逐元素相加即可得到每个区间的连续值序列

如果输入规模较小、对性能要求不高,也可以用更简洁的写法:

res = np.concatenate([start + np.arange(length) for start, length in zip(a, ranges)])

内容的提问来源于stack exchange,提问作者pr94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:36:03