如何将字符串矩阵转换为PyTorch布尔张量(非遍历实现)
无需遍历的字符串矩阵转PyTorch布尔张量方案
方法1:借助NumPy实现向量化转换
先将字符串列表转换为NumPy数组,通过向量化比较判断是否为空字符串,再转换为PyTorch张量:
import numpy as np import torch # 你的原始字符串矩阵 edge_matrix = [ ['SELF', '', '', '', ''], ['nsubj', 'SELF', '', '', ''], ['', 'compound', 'SELF', '', ''], ['dobj', '', '', 'SELF', ''], ['pobj', '', '', '', 'SELF'] ] # 一步完成转换:数组比较+转张量 edge_mask = torch.tensor(np.array(edge_matrix) != "", dtype=torch.float32) # 若需要布尔类型张量,改为 dtype=torch.bool
方法2:纯PyTorch原生实现
直接将字符串列表转为PyTorch字符串张量,再执行向量化比较:
import torch edge_matrix = [ ['SELF', '', '', '', ''], ['nsubj', 'SELF', '', '', ''], ['', 'compound', 'SELF', '', ''], ['dobj', '', '', 'SELF', ''], ['pobj', '', '', '', 'SELF'] ] # 字符串张量转置+向量化比较 str_tensor = torch.tensor(edge_matrix, dtype=torch.str) edge_mask = (str_tensor != "").float() # 布尔类型直接取 str_tensor != "" 即可
原理说明
这两种方法都利用了向量化操作,底层由PyTorch/NumPy的优化代码批量处理所有元素,避免了手动嵌套循环的开销,尤其在矩阵规模较大时,效率提升明显。
内容的提问来源于stack exchange,提问作者AfonsoSalgadoSousa
相关产品推荐
相关产品推荐

