将元素为列表的object类型numpy数组转换为ndarray遇到的问题
Numpy Object类型数组转标准数值数组方案
你之前的代码运行失败的核心原因是:传入np.asarray的参数本身已经是dtype=object的Numpy数组,Numpy不会自动解析数组内部存储的Python列表对象,因此无法直接转换为数值类型的标准多维数组。
以下是两种可直接使用的实现方案:
方法1:先转Python原生列表再转换
该方法兼容性最强,只要所有内部子列表长度一致就能得到预期结果:
import numpy as np # 你的原始object类型数组 obj_arr = np.array([list([1, 1, 1]), list([1, 1, 1])], dtype=object) # 先转成Python原生嵌套列表,再生成标准Numpy数组 res_arr = np.array(obj_arr.tolist(), dtype=np.float32)
执行后输出结果:
array([[1., 1., 1.], [1., 1., 1.]], dtype=float32)
方法2:使用堆叠函数直接转换
如果确认所有内部子列表长度一致,也可以用np.vstack直接堆叠生成目标数组:
res_arr = np.vstack(obj_arr).astype(np.float32)
注意:如果内部子列表长度不一致,两种方法都无法生成标准二维数值数组,需要先对齐子列表长度再执行转换。
内容的提问来源于stack exchange,提问作者MAC
相关产品推荐
相关产品推荐

