2014-05-14 107 views
1

我在這裏提到的一個典型的邏輯問題掛了。我有陣列的列表與說100個載體「V」和類似這樣的獲取不相關索引的列表

v1 = [1.2,3.4,5,1,23,...,2.9] #length is 21 
v2 = [0,3.4,12,11,32,...,1.3] #length is 21 
...   ...     ... 
...   ...     ... 
v100 = [1,2,32,4,7.8,...,1.2] #length is 21 

現在我需要與所有其他矢量v至計算每個向量V(I)的相關值21個值的每個向量(j)的(其中

corr(v(i) == v(j)) = 1 always # because correlation between same vectors 

這樣我計算出的相關值對於每個向量因而我有相關值的尺寸爲100×100和說列表的名稱是「c_val」

我創建的過濾器的列表像這樣

for i in range(len(v)): 
    for j in range(len(v[i])): 
     if v[i][j] >= 0.8 and i!=j: high_corr_val.append([i,j]) 

因此,這給我一對相關值等於或大於0.8的指數。這份名單是這樣

[1,14],[1,23],[1,33],[2,0],[2,12],[2,23] ....... [23,1],[23,3],[23,33] ..... 

我的任務是,採取了只保留那些獨特的指標和創建最終名單,其中任何兩個指數之間的相關性值不大於0.8(或任何值i設置)

我試過了,但對我來說很難的問題是,如果我保留1並刪除23,那麼我必須從第一個列表中刪除2和23。這可以避免我以任何方式運行循環。

請幫我解決。如果需要更多描述,請告訴我。

也請告訴我知道什麼是最好的方式高度以這種方式來創建它們之間相關載體列表提前

[1,14,23,33] 
[0,2,12] 
... 
... 

感謝......我提供一個鏈接到的文件矢量V1〜V100

https://www.dropbox.com/s/4uppagwv2vzx9qg/file_temp_val.txt

+0

你假設指數爲[1,2]和[2,1]是相等的? – jgrgurica

+0

是的,他們很明顯。我讓他們確保實際的列表索引和索引不會不匹配 – Ashutosh

+0

,並且您想刪除其中的一個? – jgrgurica

回答

0

你需要的是你要保留,而不是重疊對的列表中唯一索引的集合。您可以使用setitertools得到這個:

from itertools import chain 

indices = set(chain.from_iterable(high_corr_val)) 

然後你可以使用enumeratelist comprehension處理向量列表:

high_corr_vect = [v for i, v in enumerate(vectors) if i in indices]