You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:28:14