使用numpy广播机制,可高效地将一维数组中每个元素扩展为连续的n个数值(如[1]→[1,2,3]),全程无需python for循环,仅通过arange、升维与广播相
加、再展平即可完成。
在科学计算和数据预处理中,常需对数组中的每个值生成一段等差序列(例如每个起点向后延伸3个整数)。若用传统for循环逐个拼接,不仅代码冗长,性能也较差。NumPy提供了更优雅、向量化的方式——利用广播(broadcasting) 与维度扩展实现一次性批量展开。
核心思路是:将原始一维数组 a 升维为列向量(形状 (N, 1)),再与行向量 np.arange(n)(形状 (n,))相加。NumPy会自动广播二者至 (N, n) 的二维矩阵,其中每行对应一个起始值生成的连续序列;最后调用 .ravel() 展平为所需的一维结果。
以下是完整示例代码:
import numpy as np a = np.array([1, 9, 20, 56, 78, 120]) n = 3 # 关键一步:广播生成二维中间结果,再展平 out = (np.arange(n) + a[:, None]).ravel() print(out) # 输出: [ 1 2 3 9 10 11 20 21 22 56 57 58 78 79 80 120 121 122]
✅ 关键操作解析:
[[ 1, 2, 3], [ 9, 10, 11], [20, 21, 22], ... ]
⚠️ 注意事项:
该方案兼具简洁性、可读性与高性能,是NumPy向量化思维的典型实践。