如何将多个ndarray合并为单个数组?np.array转换结果不符的解决办法
问题本质
你通过np.array(my_list, dtype=object)得到带list(...)标识的输出,核心原因是两个子列表长度不一致(第一行3个元素、第二行2个元素):
- 当所有子列表长度完全一致时,numpy可自动对齐嵌套维度,直接生成规则的二维字符串数组,输出形态和你的期望完全匹配
- 当子列表长度无法对齐为规则二维结构时,numpy会自动退化为一维对象数组,直接将每个子列表作为单个Python列表对象存入外层数组,最终输出就会带上原生Python列表的
list(...)标识,和numpy子数组的展示形态存在差异
可复现的解决方案
通过手动初始化外层对象数组、逐元素赋值转换后的子数组,即可得到目标结构:
- 导入numpy库
- 初始化指定形状的空对象数组
- 逐行将子列表转换为numpy定长字符串数组,赋值到外层数组对应位置
import numpy as np my_list = [['Hamburg', 'Hanover', 'Leipzig'], ['Leipzig', 'Nuremberg']] # 初始化形状为(2,)的空对象数组 correct_result = np.empty(shape=(2,), dtype=object) # 逐行赋值独立的numpy子数组 correct_result[0] = np.array(my_list[0]) correct_result[1] = np.array(my_list[1])
输出验证
运行上述代码后,correct_result的实际输出为:
[array(['Hamburg', 'Hanover', 'Leipzig'], dtype='<U7')
array(['Leipzig', 'Nuremberg'], dtype='<U9')]
该结构和你给出的期望结构完全匹配,不存在原生Python列表的list(...)标识,每个内层元素都是独立的numpy字符串数组。
补充说明:常规规则二维numpy数组要求所有行长度完全一致,受限于两个子列表的长度差异,无法生成行长度不等的规则二维数组,上述嵌套对象数组结构是唯一能匹配你期望形态的实现方式
内容的提问来源于stack exchange,提问作者Rasoul Sadeghi
相关产品推荐
相关产品推荐

