使用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
相关产品推荐
相关产品推荐

