加载CSV图像数据时遇浮点与NumPy数组相乘错误求助
解决浮点值与NumPy数组相乘报错:
can't multiply sequence by non-int of type 'float' 你猜的完全没错!这个报错的核心原因就是像素列被识别成了单个字符串,而不是我们需要的数值数组。你看到的['70 80 82 72 58 58 60 63 ....34']就是明证——这是一整行像素拼成的字符串,不是分开的数值,所以当你用浮点数去乘它时,Python会直接报错(毕竟字符串只能和整数相乘来重复内容,和浮点数完全不兼容)。
下面给你一套直接可行的修复方案:
步骤1:将字符串格式的像素拆分为数值数组
我们可以用pandas的apply方法,把每个像素字符串按空格拆分,再转换成浮点类型的数组:
import numpy as np import pandas as pd # 保留你原有的数据读取逻辑 df = pd.read_csv('C:/Python36(64bit)/programs/intern/fer2013.csv') df = df.drop('Usage', axis=1) train = df[:28709] test = df[28709:30000] train_x = train.drop('emotion', axis=1) train_y = train['emotion'] test_x = test.drop('emotion', axis=1) test_y = test['emotion'] # 关键处理:拆分像素字符串并转为浮点数组 train_x['pixels'] = train_x['pixels'].apply(lambda x: np.array(x.split(), dtype=np.float32)) test_x['pixels'] = test_x['pixels'].apply(lambda x: np.array(x.split(), dtype=np.float32))
步骤2:转换为可运算的矩阵(可选但推荐)
如果需要把整列像素转换成「样本数×像素数」的矩阵(方便后续和其他矩阵相乘),可以用np.stack来拼接所有样本的像素数组:
train_x_matrix = np.stack(train_x['pixels'].values) test_x_matrix = np.stack(test_x['pixels'].values)
测试乘法操作
现在再测试第一行乘0.1就完全没问题了:
a = train_x_matrix[0] b = a * 0.1 print(b)
额外说明
为什么会出现这个问题?因为CSV文件里的pixels列是用空格分隔的一串数字,pandas默认会把它识别为单个字符串单元格,而不是自动拆分成多个数值列。所以必须手动拆分转换,才能进行数值运算。
内容的提问来源于stack exchange,提问作者Karan Purohit
相关产品推荐
相关产品推荐

