Python中如何将多个非结构化可迭代对象拼接为2维numpy数组
解决方案
你的报错核心原因是第一个序列的元素是0维标量,和另外两个的1维元素维度不匹配,只需要先统一每个子数组的维度,再按列拼接即可,最简单的实现代码如下:
import numpy as np # 原始示例数据 arr = [ [1,2,3,4,5], [(1,2), (2,3), (3,4), (4,5), (5, 6)], np.array([[1,2,3], [2,3,4], [3,4,5],[4,5,6],[5,6,7]]) ] # 统一三个子数组为二维结构,长度均为5,分别对应1/2/3列 part1 = np.array(arr[0])[:, np.newaxis] # 形状从(5,)转为(5,1) part2 = np.array(arr[1]) # 转换后形状为(5,2) part3 = arr[2] # 本身已经是(5,3)的二维结构 # 按列方向拼接得到最终结果 result = np.concatenate([part1, part2, part3], axis=1)
打印result即可得到你需要的输出:
array([[1, 1, 2, 1, 2, 3], [2, 2, 3, 2, 3, 4], [3, 3, 4, 3, 4, 5], [4, 4, 5, 4, 5, 6], [5, 5, 6, 5, 6, 7]])
实现原理
- 用
[:, np.newaxis]给第一个一维数组额外增加一个维度,将原本的一维结构转为和另外两个子数组匹配的二维结构 np.concatenate指定axis=1代表按列方向拼接,会自动将三个子数组的同一行元素按顺序拼接,完全符合需求。
内容的提问来源于stack exchange,提问作者Slavka
相关产品推荐
相关产品推荐

