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

如何用Numpy以向量化方式快速生成多区间连续数组

用Numpy向量化高效生成连续区间数组

嘿,这个需求我太熟了!用Numpy的纯向量化操作就能完美解决,完全不用写拖慢速度的Python循环,大数据量下性能优势特别明显~

最优纯向量化实现方案

直接上可运行的代码:

import numpy as np

# 定义输入数组
a = np.array([1, 12, 60, 80, 90, 210])
b = np.array([11, 30, 79, 89, 99, 232])

# 1. 计算每个区间的元素总数
interval_lengths = b - a + 1
# 2. 生成重复对应次数的区间起始值数组
repeated_starts = np.repeat(a, interval_lengths)
# 3. 计算每个位置对应的区间内偏移量(0到区间长度-1)
total_elements = interval_lengths.sum()
global_indices = np.arange(total_elements)
# 用累积和得到每个区间的起始索引,再重复对应次数
interval_start_indices = np.repeat(np.cumsum(interval_lengths) - interval_lengths, interval_lengths)
offsets = global_indices - interval_start_indices
# 4. 起始值+偏移量得到最终连续数组
c = repeated_starts + offsets

代码逻辑拆解

  • 计算区间长度:interval_lengths = b - a + 1,比如区间[1,11]包含11个数字,用结束值减起始值加1就能得到准确长度。
  • 重复起始值:np.repeat(a, interval_lengths)把每个区间的起始值重复对应次数,比如1会被重复11次,12被重复19次(30-12+1=19)。
  • 生成偏移量:通过全局索引减去每个区间的起始索引,得到每个位置在对应区间内的偏移(从0开始递增),这样就能给每个起始值加上对应偏移,生成连续数字。
  • 合并结果:起始值数组加偏移量数组,直接得到所有区间的连续数字拼接结果。

简洁版(适合小数据量)

如果你的数据量不大,也可以用更简洁的写法(本质是列表推导+拼接,性能略逊于纯向量化,但代码更易读):

c = np.concatenate([np.arange(start, end + 1) for start, end in zip(a, b)])

两种方法都能生成你需要的c数组,比如第一个区间会生成1,2,...,11,第二个区间生成12,13,...,30,完全符合需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:25