使用PyTorch张量创建邻接矩阵时报int对象不支持赋值错误如何解决
问题原因
你遇到的报错和函数本身的逻辑无关,是调用函数时传入的参数不是你预期的torch.Tensor类型,实际传入了整数类型的值。
你单独运行代码时提前给a赋值为torch.rand(3,3)生成的张量,所以索引赋值操作可以正常执行;但调用create_adj的时候大概率是直接传入了邻接矩阵的尺寸整数(比如create_adj(3)),函数拿到的参数a是int类型,自然不支持张量的索引赋值操作,就抛出了对应错误。
验证方法
你可以在函数第一行新增打印逻辑,确认输入参数的实际类型:
def create_adj(a): # 新增此行查看输入的实际类型和值 print(f"输入参数类型:{type(a)},输入参数值:{a}") a[a>0.5] = 1 a[a<=0.5] = 0 return a
正确使用方式
方式1:保持原函数逻辑,调用时传入张量参数
import torch # 先生成随机张量再传入函数 input_tensor = torch.rand(3,3) adj_matrix = create_adj(input_tensor) print(adj_matrix)
方式2:调整函数参数为尺寸,内部生成张量
如果你希望直接传入邻接矩阵的边长生成对应矩阵,可以修改函数逻辑:
def create_adj(matrix_size): a = torch.rand(matrix_size, matrix_size) a[a>0.5] = 1 a[a<=0.5] = 0 return a # 调用示例:生成3*3的随机邻接矩阵 adj_matrix = create_adj(3)
内容的提问来源于stack exchange,提问作者James Arten
相关产品推荐
相关产品推荐

