有一个随机初始化的火炬张量,其形状如下。
输入
tensor1 = torch.rand((4,2,3,100))
tensor2 = torch.rand((4,2,3,100))
Run Code Online (Sandbox Code Playgroud)
tensor1和tensor2分别是具有 24 100 维向量的火炬张量。
torch.size([4,2,3])我想通过获得具有相同索引的两个张量的向量之间的欧几里德距离来获得形状为 的张量。
我曾经dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)得到过我想要的结果。
但是,该pairwise_distance函数计算张量第二维的欧几里德距离。所以dist形状是torch.size([4,3,100])。
我已经执行了几次转置来解决这些问题。我的代码如下。
tensor1 = tensor1.transpose(1,3)
tensor2 = tensor2.transpose(1,3)
dist = torch.nn.functional.pairwise_distance(tensor1, tensor2)
dist = dist.transpose(1,2)
Run Code Online (Sandbox Code Playgroud)
有没有更简单或更容易的方法来获得我想要的结果?
输入
我有一个非常复杂的清单。
total_aug_rule_path_list =
[[[[['#1_0_0', '#2_0_0', '#3_0_0'], ['#1_0_1', '#2_0_1', '#3_0_1']],
[['#1_0_0', '#2_0_0', '#3_0_0'], ['#1_0_1', '#2_0_1', '#3_0_1']]],
[[['#1_1_0', '#2_1_0', '#3_1_0', '#4_1_0'],
['#1_1_1', '#2_1_1', '#3_1_1', '#4_1_1']]]]]
Run Code Online (Sandbox Code Playgroud)
我有一本字典,其中列表的每个元素作为键。
sym2id_dict = {
'#1_0_0': 1,
'#1_0_1': 2,
'#1_1_0': 3,
'#1_1_1': 4,
'#2_0_0': 5,
'#2_0_1': 6,
'#2_1_0': 7,
'#2_1_1': 8,
'#3_0_0': 9,
'#3_0_1': 10,
'#3_1_0': 11,
'#3_1_1': 12,
'#4_1_0': 13,
'#4_1_1': 14,}
Run Code Online (Sandbox Code Playgroud)
我将把列表的每个元素映射到字典的值。
输出
[[[[[1, 5, 9], [2, 6, 10]], [[1, 5, 9], [2, 6, 10]]],
[[[3, 7, 11, 13], [4, 8, 12, 14]]]]]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法来尽可能少地使用 for …