如何将CSV中存储的字符串形式Tensor转换回Tensor对象
将CSV中的Tensor字符串转回PyTorch Tensor对象
以下是几种可行的转换方法:
方法1:直接使用eval(简单但需注意安全)
如果CSV数据来源可信,可通过字符串清理+eval快速转换:
import torch # 从CSV读取的Tensor字符串 tensor_str = "'tensor([-1.7110e-01, 1.3811e-01, -2.5881e-01, -1.8281e-01, -3.3073e-01,\n -1.1071e-01])'" # 去除首尾单引号 cleaned_str = tensor_str.strip("'") # 转换为Tensor对象 tensor = eval(cleaned_str) # 验证结果 print(tensor) print(type(tensor)) # 输出 <class 'torch.Tensor'>
⚠️ 注意:eval会执行字符串中的任意代码,若CSV数据不可信(比如包含恶意代码),请勿使用此方法。
方法2:正则提取数值后转换(安全通用)
通过正则表达式提取数值列表,再手动转换为Tensor,避免执行未知代码:
import torch import re tensor_str = "'tensor([-1.7110e-01, 1.3811e-01, -2.5881e-01, -1.8281e-01, -3.3073e-01,\n -1.1071e-01])'" # 提取括号内的数值字符串 num_section = re.search(r'\[(.*?)\]', tensor_str, re.DOTALL).group(1) # 清理换行符、分割数值 num_strs = re.split(r',\s*', num_section.replace('\n', '')) # 转换为float列表 num_list = [float(num) for num in num_strs] # 生成Tensor tensor = torch.tensor(num_list) # 验证结果 print(tensor) print(type(tensor))
方法3:使用ast.literal_eval(安全且简洁)
利用ast.literal_eval解析列表(比eval安全,仅支持字面量解析),再转换为Tensor:
import torch import ast tensor_str = "'tensor([-1.7110e-01, 1.3811e-01, -2.5881e-01, -1.8281e-01, -3.3073e-01,\n -1.1071e-01])'" # 清理字符串:去掉单引号、替换tensor(...)为列表格式 cleaned_str = tensor_str.strip("'").replace('tensor(', '').replace(')', '') # 解析为Python列表 num_list = ast.literal_eval(cleaned_str) # 转换为Tensor tensor = torch.tensor(num_list) # 验证结果 print(tensor) print(type(tensor))
内容的提问来源于stack exchange,提问作者Him Singhvi
相关产品推荐
相关产品推荐

