【问题标题】:Getting the list of uncorrelated indices获取不相关索引的列表
【发布时间】:2014-05-14 06:36:09
【问题描述】:

我陷入了我在这里提到的一个典型的逻辑问题。我有一个数组列表,其中包含 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 的链接

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

【问题讨论】:

  • 您是否假设索引 [1,2] 和 [2,1] 相等?
  • 是的,很明显。我保留它们以确保列表索引和实际索引不匹配
  • 你想删除其中一个?

标签: python list sorting correlation


【解决方案1】:

您需要的是要保留的所有唯一索引的集合,而不是具有重叠的对的列表。您可以使用setitertools 来获取:

from itertools import chain

indices = set(chain.from_iterable(high_corr_val))

然后您可以在list comprehension 中使用enumerate 来处理向量列表:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多