我正在编写这段代码,其中嵌套了 for 循环。 a_list
和b_list
是元组列表,其中每个元组由两个张量组成 [(tens1, tens2), ...]
。我正在尝试计算每个 tens1
的相似度在a_list
给每个tens1
在b_list
。下面是我的代码。嵌套循环似乎是一个瓶颈。有没有更好的方法(pythonic)可以重写循环?
a2b= defaultdict(dict)
b2a= defaultdict(dict)
ab_sim = []
for a, vec_a in a_list:
for b, vec_b in b_list:
# Ignore combination if the first element in both a and b are same
if a[0] == b[0]:
continue
# Calculate cosine similarity of combination
sim = self.calculate_similarity(vec_a, vec_b )
a2b[a][b] = sim
b2a[b][a] = sim
ab_sim.append(sim)
calculate_similarity
只是一种计算余弦相似度的方法。 a_list
和b_list
可以是任何大小。我有b2a
和a2b
因为我需要它们进行其他计算。
最佳答案
您可以使用字典理解:
a2b = {a: {b: self.calculate_similarity(vec_a, vec_b )
for (b, vec_b) in b_list if a[0] != b[0]} for (a, vec_a) in a_list}
关于Pythonic 嵌套 for - Python 中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60378598/