如何使用np.vstack将列表中的numpy数组堆叠为m×2矩阵
解决方案
完整可运行代码如下:
import numpy as np # 原始数组定义 a = np.array([]) b = np.array([1,2]) c = np.array([[5,6],[7,8]]) d = np.array([[11,12],[13,14],[15,16]]) E = [a,b,c,d] # 调整后的堆叠逻辑 processed_arr = [arr.reshape(-1, 2) for arr in E if arr.size > 0] F = np.vstack(processed_arr) print(F)
运行后输出和你预期的结果完全一致:
[[ 1 2] [ 5 6] [ 7 8] [11 12] [13 14] [15 16]]
原代码报错原因
原有写法存在两个不满足np.vstack要求的问题:
- 空数组
a的维度为(0,),和其他数组的维度不匹配,np.vstack无法对维度不一致的数组执行堆叠操作 - 数组
b是一维数组,维度为(2,),并非预期的1×2二维结构,直接堆叠也会触发维度错误
处理逻辑说明
- 遍历列表时通过
if arr.size > 0过滤掉所有空数组,从根源上排除空值干扰 - 用
.reshape(-1, 2)将所有非空数组统一转换为n×2的二维结构:其中-1会自动根据数组总元素数计算对应的行数,保证第二维固定为2 - 处理后的所有数组维度完全匹配,调用
np.vstack即可正常堆叠得到目标矩阵
内容的提问来源于stack exchange,提问作者birdeye5
相关产品推荐
相关产品推荐

