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

如何将1维numpy数组重复堆叠为指定行数的2维numpy矩阵

实现一维numpy数组按行重复堆叠的方法

问题背景

现有1维numpy数组:[0, 0, 0, 0, 0, 0, 0, 0, 0, 1],需要将其重复5次按行堆叠,构造5行10列、每行内容与原数组完全一致的2维矩阵,期望输出如下:

[[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]]

numpy中以下几种内置方法都可以高效实现该需求:

  • np.tile(推荐,语义最匹配)
    该方法的设计目的就是按指定维度重复铺放数组,代码最直观、执行效率也属于第一梯队:

    import numpy as np
    arr = np.array([0,0,0,0,0,0,0,0,0,1], dtype=np.float64)
    # 参数传入(行重复次数, 列重复次数),列不需要重复所以传1
    result = np.tile(arr, (5, 1))
    
  • np.repeat + 维度扩展
    np.repeat用于沿指定轴重复数组元素,先给原1维数组增加一个行维度,再沿行轴重复5次即可:

    import numpy as np
    arr = np.array([0,0,0,0,0,0,0,0,0,1], dtype=np.float64)
    # arr[np.newaxis, :] 将数组形状从(10,)转为(1,10)
    result = np.repeat(arr[np.newaxis, :], 5, axis=0)
    
  • np.vstack(写法最简洁)
    垂直堆叠接口,直接传入包含5份原数组的列表即可完成堆叠,适合快速写代码的场景:

    import numpy as np
    arr = np.array([0,0,0,0,0,0,0,0,0,1], dtype=np.float64)
    result = np.vstack([arr]*5)
    
  • 广播运算实现
    利用numpy的广播机制,通过形状为(5,1)的全1矩阵和原数组做矩阵乘法,自动广播得到目标矩阵,适合需要同步做数值计算的场景:

    import numpy as np
    arr = np.array([0,0,0,0,0,0,0,0,0,1], dtype=np.float64)
    result = np.ones((5, 1)) @ arr[np.newaxis, :]
    

效率提示:处理大规模数组时,优先选择np.tile和np.repeat,二者是numpy底层专门为数组重复操作实现的接口,内存开销最小、运行速度最快;np.vstack在数据量小于100万级时和前两者速度差异极小,日常使用完全足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:48:33