2017-10-05 86 views
0

是否有优雅/ pythonic的方式来检索列表的元素的交叉和自动相关?python itertools组合包括自动关联

我可以手动做到这一点,但我想尝试和使用itertools.combinations,默认情况下,它似乎不会产生自相关[(1,1),(2,2)等]。

这个问题实际上与交叉只有-correlations涉及:

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

有许多事情错的问题,其中包括一段示例代码,这将引发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_replacementdata[::-1]扭转data的选项。很可能,set可以派上用场,因为它支持union操作。