如何移除np.array的dtype信息?图像转数组后列表显示异常求助
解决Keras图像数组列表打印带dtype信息的问题
嘿,我来帮你搞定这个小问题!你遇到的情况其实很正常——image.img_to_array()返回的是numpy.ndarray对象,这类对象在打印时默认会显示自身的内容和数据类型(dtype),所以你看到的带dtype=float32的“类元组形式”,其实是numpy数组的标准打印格式啦。
下面给你两种实用的解决方案,按需选择:
方案1:转成纯Python列表(彻底去掉dtype显示)
如果你只是希望列表里存的是纯数组内容,打印时完全看不到numpy相关的标识,只需要把numpy数组转换成Python原生列表再添加到列表里就行,用numpy数组的.tolist()方法就能实现:
import os from keras.preprocessing import image images = [] food_label = [] # 假设你的imagePaths已经定义好了 # imagePaths = [...] for imagepath in imagePaths: pic = image.load_img(imagepath) pic_array = image.img_to_array(pic) # 关键:把numpy数组转成Python列表 images.append(pic_array.tolist()) label = imagepath.split(os.path.sep)[-2] food_label.append(label) print(images)
这样打印出来的images就是纯Python列表的嵌套结构,完全看不到dtype信息啦。如果之后你需要把这些数据用于Keras模型训练,只需要用numpy.array(images)把整个列表转回numpy数组就行,非常方便。
方案2:保留numpy数组特性,优化打印格式
如果你需要保留numpy数组的特性(比如后续要做数值运算、模型训练),只是想让打印出来的内容更简洁,可以调整numpy的打印配置,或者自定义打印逻辑:
比如修改numpy的打印选项,让它只显示数组内容,隐藏dtype(不过还是会保留array(...)的标识):
import numpy as np import os from keras.preprocessing import image # 设置numpy打印选项,隐藏dtype np.set_printoptions(formatter={'all': lambda x: str(x)}) images = [] food_label = [] imagePaths = # 你的图像路径列表 for imagepath in imagePaths: pic = image.load_img(imagepath) pic_array = image.img_to_array(pic) images.append(pic_array) label = imagepath.split(os.path.sep)[-2] food_label.append(label) # 遍历打印每个数组,也能避免显示dtype for arr in images: print(arr.tolist())
这种方法适合需要保留numpy数组功能,但又想让输出更清爽的场景。
内容的提问来源于stack exchange,提问作者np.everyproblempossible
相关产品推荐
相关产品推荐

