不同长度float64子数组构成的numpy object数组转float64方法咨询
问题根源
你创建外层conc数组时,由于初始子数组长度不一致,numpy无法生成规整的多维数值数组,直接退化为存储numpy数组对象的object类型数组。后续修改每个元素的长度只是更新了数组内存储的对象,不会改变外层数组本身的dtype,因此直接调用astype(np.float64)会无法转换。
适配场景的解决方案
你不需要手动给每个子数组补零,直接基于已有的object数组生成新的规整float64数组即可,不需要修改之前的数组生成逻辑,完全在后续环节完成处理:
- 遍历所有子数组,计算得到子数组的最大长度
- 初始化一个形状为
(子数组数量, 最大长度)的float64数组,默认填充0 - 逐个将子数组的内容写入新数组的对应位置,不足的位置自动留0
可运行的示例代码
import numpy as np # 模拟你已经生成好的object类型大数组 A = [1.0, 2.0] B = [3.0] C = [5.0,6.0] conc = [] conc.append(np.array(A)) conc.append(np.array(B)) conc.append(np.array(C)) conc = np.array(conc) # 此处生成的就是dtype为object的数组 # 后续转换逻辑 max_len = max(len(arr) for arr in conc) new_conc = np.zeros((len(conc), max_len), dtype=np.float64) for idx, sub_arr in enumerate(conc): new_conc[idx, :len(sub_arr)] = sub_arr # 验证结果 print(new_conc.dtype) print(new_conc)
运行后输出:
float64 [[1. 2.] [3. 0.] [5. 6.]]
内容的提问来源于stack exchange,提问作者Gandharv Bakshi
相关产品推荐
相关产品推荐

