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

使用torch.tensor转换numpy.bool_数组报错,求原因及解决方法

解决PyTorch无法转换numpy.bool_类型为张量的问题

嘿,我一眼就看到问题出在哪了——你的astype调用根本没生效!

Pandas的astype()方法是非原地修改的,也就是说它会返回一个转换后的新DataFrame,但不会改变原来的变量。你之前写的Y_train_class.astype(np.float32)只是生成了一个float类型的临时对象,却没把它赋值回Y_train_class,所以这个变量依然是布尔类型的,转PyTorch张量的时候自然就触发那个类型不支持的错误了。

给你两个简单的解决办法,选哪个都行:

方法一:创建布尔判断时直接转换类型

在生成Y_train_class的同时就把它转成PyTorch支持的数值类型,一步到位:

import pandas as pd
import numpy as np
import torch

X_train = pd.read_csv('c:/Data/x_train_set_yu.csv', header=None)
Y_train = pd.read_csv('c:/Data/y_train_set_yu.1.csv', header=None)

# 直接将布尔结果转为float32类型
Y_train_class = (Y_train >= 550).astype(np.float32)
# 要是你用int类型也可以,比如int32,PyTorch也支持
# Y_train_class = (Y_train >= 550).astype(np.int32)

X_test = pd.read_csv('c:/Data/X_test.csv', header=None)

X_train = torch.tensor(X_train.values)
Y_train_class = torch.tensor(Y_train_class.values)

方法二:转张量时指定目标类型

如果你不想修改原DataFrame,也可以在调用torch.tensor()的时候直接指定dtype参数,强制转换类型:

# 保留原来的布尔判断,转张量时指定dtype
Y_train_class = torch.tensor(Y_train_class.values, dtype=torch.float32)
# 同样也可以用int类型
# Y_train_class = torch.tensor(Y_train_class.values, dtype=torch.int32)

另外提一句,PyTorch确实不支持直接把numpy的布尔数组转成张量,所以必须转成它支持的类型——比如float32、int32、int64这些都没问题,具体选哪个看你的任务需求就行(比如分类任务用int类型完全ok)。

内容的提问来源于stack exchange,提问作者yctsao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:38:08