如何用Numpy快速生成首尾唯一、其余元素重复两次的特定数列?
更高效的数列实现方式
你的原代码逻辑正确,但存在更直接高效的实现方案,以下是两种实用思路:
方法一:直接索引赋值(内存&性能最优)
这种方式无需额外创建多个中间数组,直接在目标数组上完成赋值,内存开销最小,执行速度最快:
import numpy as np last = 35 sequence = np.empty(2 * last, dtype=int) sequence[::2] = np.arange(last) # 偶数索引位置填充0到last-1 sequence[1::2] = np.arange(1, last+1) # 奇数索引位置填充1到last print(sequence)
方法二:repeat拼接(代码更简洁直观)
通过对中间元素重复两次,再拼接首尾的单个元素,写法清晰易懂:
import numpy as np last = 35 sequence = np.concatenate([ [0], np.repeat(np.arange(1, last), 2), [last] ]) print(sequence)
方案对比
- 原代码需要生成两个长度为
last的数组,再堆叠成二维数组后展开,内存占用约为目标数组的2倍。 - 方法一仅创建一个目标数组,直接完成赋值操作,内存使用率最优,大数值场景下性能优势明显。
- 方法二写法简洁,但会生成中间重复数组,内存开销略高于方法一,但仍优于原代码。
内容的提问来源于stack exchange,提问作者Certes
相关产品推荐
相关产品推荐

