2017-10-05 85 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操作。