如何修复‘TypeError: float() argument must be a string or a number, not 'map'’错误
解决TypeError: float() argument must be a string or a number, not 'map'的问题
这个错误的核心原因很明确:在Python 3中,map()返回的是迭代器对象,而非直接生成列表。当你直接把这个迭代器传给np.array()时,numpy会尝试将整个迭代器作为单个元素转换为float32类型——但迭代器既不是字符串也不是数字,自然就抛出了这个错误。
下面给你两种实用的解决办法:
方法1:将map对象转为列表(最直接的修复)
只需要用list()把map返回的迭代器包裹起来,先把它转换成numpy能识别的序列类型,再转数组:X_train = np.array(list(map(str.split, train_set.pixels)), np.float32)方法2:用原生numpy函数处理(更高效的方式)
如果你的train_set.pixels是可迭代的字符串集合(比如Pandas Series或numpy数组),可以用numpy的字符操作函数来完成分割,避免Python层面的迭代,效率会更高:# 先将像素字符串转为numpy字符串数组 pixels_str_array = np.array(train_set.pixels, dtype=str) # 分割每个字符串并转换为float32类型 X_train = np.array(np.char.split(pixels_str_array).tolist(), np.float32)
额外提示:调整数组形状匹配你的参数
因为你设置了depth=1、height=width=48,处理完之后记得把数组reshape成对应的形状,这样才能用于后续的模型输入:
X_train = X_train.reshape(-1, 48, 48, 1)
内容的提问来源于stack exchange,提问作者Nagesh
相关产品推荐
相关产品推荐

