是否有优雅/ pythonic方法来检索两个列表元素的交叉和自动关联?
我可以手动执行此操作,但我想尝试使用itertools.combinations
,默认情况下似乎不会产生自动关联[(1,1),(2,2)等]
这个问题实际上仅涉及交叉 - 相关:
Calculating correlations between every item in a list
尝试使用MWE:
import itertools
data = range(4); crosscorrs=[]
# Get the cross-correlations:
for (i,j) in itertools.combinations(data, 2):
crosscorrs.append((i,j))
# How to get the auto-correlations?
# What about the (j,i) correlations even?!
# Result
print crosscorrs
甚至(j,i)相关性怎么样??
感谢您的帮助
答案 0 :(得分:1)
这个问题有很多问题,包括一段会引出Exception
的示例代码,但我会尝试解决你似乎要问的问题。
当您将集合命名为“crosscorrs”时,我认为您需要单独的“交叉相关”索引和“自相关”索引列表。要获得(j,i)索引,您可以直接引用它们。可以将相同索引的东西添加到集合中,以避免重复。
from itertools import combinations
data = range(4)
crosscorrs=[]
autocorrs = set()
for (i,j) in combinations(data,2):
crosscorrs.extend([(i,j),(j,i)])
autocorrs.add((i,i))
autocorrs.add((j,j))
print(crosscorrs, '\n')
print(list(autocorrs))
如果您希望所有这些都进入1个集合,请查看itertools.combinations_with_replacement
和data
data[::-1]
后退的选项。很可能,set
可以派上用场,因为它支持union
次操作。