我挂在一个典型的逻辑问题中,我在这里提到。我有一个数组列表,说100个矢量'V'和21个值的每个矢量像这样
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(i)与所有其他向量v(j)的相关值(其中
corr(v(i) == v(j)) = 1 always # because correlation between same vectors
像这样我计算了每个向量的相关值,因此我有一个维度为100 x 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(或我设置的任何值)
我尝试但是让我感到困难的问题是,如果我保留1并删除23,那么我必须从第一个列表中删除2和23。这避免了我以任何方式运行循环。
请帮我解决一下。如果需要更多说明,请告诉我。
另外请告诉我知道以这种方式创建一个相互关联的向量列表的最佳方法是什么
[1,14,23,33]
[0,2,12]
...
...
提前感谢...我提供了矢量v1到v100
文件的链接答案 0 :(得分:0)
您需要的是您想要保留的所有唯一索引的集合,而不是具有重叠的对的列表。您可以使用set
和itertools
来获取此信息:
from itertools import chain
indices = set(chain.from_iterable(high_corr_val))
然后您可以在enumerate
中使用list comprehension来处理向量列表:
high_corr_vect = [v for i, v in enumerate(vectors) if i in indices]