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

使用np.vstack垂直堆叠数组时出现ValueError问题求助

问题描述

我有一个矩阵epoch,其中每个epoch[i][0]是m×5的数组,m的值随i变化。例如:

epoch[0][0] = [[-5.50571416e-21, -5.92923063e-21,  4.23516474e-21,
        -2.54109884e-21, -5.08219768e-21],
       [-3.03901510e-06, -1.40172574e-06, -8.46450345e-07,
        -3.90002708e-06, -5.56446205e-07],
       [-7.01145041e-06, -3.47478034e-06,  9.50491200e-08,
        -6.93224460e-06, -3.56839111e-06]]
epoch[1][0] = [[-5.50571416e-21, -5.92923063e-21,  4.23516474e-21,
        -2.54109884e-21, 8],
       [-3, -1, -8.46450345e-07,
        -3.90002708e-06, -5.56446205e-07]]

我想要将所有i对应的epoch[i][0]垂直堆叠。手动执行np.vstack((epoch[0][0],epoch[1][0]))可以正常运行,但使用如下循环时出现错误:

X = []
for i in range(19): #there are 19 segments
    X=np.vstack((X,epoch[i][0]))

报错信息如下:

ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 0 and the array at index 1 has size 5
解决方案

错误根源在于初始的X = []是Python列表而非NumPy数组,第一次执行np.vstack时,空列表会被识别为维度不匹配的数组,和后续5列的数组冲突。

这里提供两种可行的解决方法:

  • 方法一:初始化X为第一个数组,再循环堆叠剩余元素

    import numpy as np
    
    X = epoch[0][0]
    for i in range(1, 19):
        X = np.vstack((X, epoch[i][0]))
    
  • 方法二:先收集所有数组到列表,再一次性堆叠
    这种方法性能更优,避免循环中多次堆叠的额外开销:

    import numpy as np
    
    arr_list = [epoch[i][0] for i in range(19)]
    X = np.vstack(arr_list)
    

两种方法都能保证输入数组维度匹配,最终得到总行数为所有m之和、列数为5的堆叠数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:15:41