Python如何将X_train嵌套列表内所有原生float转换为numpy.float64
问题描述
我有一个X_train对象,共包含16个列表,每个子列表内存储了1个numpy数组,以及若干原生Python float或numpy.float64类型的变量,需要将每个子列表内的所有原生float类型统一转换为numpy.float64类型。
相关数据结构参考截图:

最初编写的实现代码未达到预期效果:
for mylists in X_train: for x in mylists: if type(x) is np.ndarray: # 跳过子列表内的数组 print(' numpy array') elif isinstance(x, float): float(x) # 尝试将原生float转换为float64 else: print('Not even a float')
失效原因
代码没有生效的核心问题有两个:
float(x)的作用是将输入转换为原生Python float类型并返回计算结果,既没有转成numpy.float64,也没有把结果写回原列表,属于无效操作- 遍历列表时拿到的
x是临时变量,直接对x赋值不会修改原列表存储的元素,必须通过索引定位到元素位置做替换,修改才能真正生效
修正后代码
通过索引遍历子列表元素,原地替换符合条件的原生float即可:
import numpy as np for sub_list in X_train: # 同时拿到元素索引和值 for idx, item in enumerate(sub_list): # 跳过numpy数组元素 if isinstance(item, np.ndarray): continue # 精准匹配原生Python float类型,避免重复转换已有的numpy.float64 if type(item) is float: sub_list[idx] = np.float64(item)
提示:如果后续需要兼容其他float衍生类型的转换,可以把类型判断条件替换为
isinstance(item, float) and not isinstance(item, np.floating),逻辑更严谨。
内容的提问来源于stack exchange,提问作者Shahram
相关产品推荐
相关产品推荐

