如何堆叠不同形状的numpy数组 解决np.stack报错问题
numpy异构形状数组堆叠解决方案
你调用np.stack报错的核心原因是该函数要求所有输入数组的形状完全一致,你使用的a形状为(2, 3),b形状为(2,),形状不匹配,因此无法直接堆叠。
你期望的输出中,每行包含两个形状不一致的元素(长度为3的数组 + 标量),numpy原生的同类型多维数组不支持这种结构,需要使用dtype=object的对象数组实现,以下是两种可行方案:
方案1:直接预分配对象数组赋值
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([7, 8]) # 预分配形状为(2, 2)的对象数组 result = np.empty((2, 2), dtype=object) # 第一列填充a的行数组 result[:, 0] = list(a) # 第二列填充b的标量 result[:, 1] = b
输出结果和你预期完全一致:
array([[array([1, 2, 3]), 7], [array([4, 5, 6]), 8]], dtype=object)
方案2:列表推导后转对象数组
如果逻辑更简单,也可以先通过列表推导构造嵌套列表,再转numpy数组:
result = np.array([[row_a, row_b] for row_a, row_b in zip(a, b)], dtype=object)
内容的提问来源于stack exchange,提问作者user10397650
相关产品推荐
相关产品推荐

