先说结论:
1.Tensor可以作为字典的键.
2.修改原张量的元素, 仍然可以通过该张量访问值.
3.无法用与字典中键元素完全相同的新张量尝试访问值. 猜测: Tensor作为字典的键时是使用内存地址进行哈希的.
测试代码:
tensor1 = torch.tensor([1.0, 2.0, 3.0])
tensor2 = torch.tensor([4.0, 5.0, 6.0])
test_dict = {}
test_dict[tensor1] = "值1"
test_dict[tensor2] = "值2"
print("字典:")
for key, value in test_dict.items():
print(f"Key: {key}, Value: {value}")
print("\n测试1: 通过原张量访问字典值:")
print(f"张量1对应的值: {test_dict[tensor1]}")
print(f"张量2对应的值: {test_dict[tensor2]}")
print("\n测试2: 修改张量1, 并通过修改后的张量尝试访问字典值")
tensor1[0] = 10.0
print(f"修改后的张量1: {tensor1}")
print(f"修改后的张量1对应的值: {test_dict[tensor1]}")
tensor3 = torch.tensor([4.0, 5.0, 6.0])
print("\n测试3: 创建与张量2值相同的张量3, 尝试通过张量3访问字典值:")
print(f"张量2与张量3的比较: {tensor2 == tensor3}")
print(f"张量2对应的值: {test_dict.get(tensor2, '未找到Key')}")
print(f"张量3对应的值: {test_dict.get(tensor3, '未找到Key')}")
输出:
字典:
Key: tensor([1., 2., 3.]), Value: 值1
Key: tensor([4., 5., 6.]), Value: 值2
测试1: 通过原张量访问字典值:
张量1对应的值: 值1
张量2对应的值: 值2
测试2: 修改张量1, 并通过修改后的张量尝试访问字典值
修改后的张量1: tensor([10., 2., 3.])
修改后的张量1对应的值: 值1
测试3: 创建与张量2值相同的张量3, 尝试通过张量3访问字典值:
张量2与张量3的比较: tensor([True, True, True])
张量2对应的值: 值2
张量3对应的值: 未找到Key