我有以下代码:
for i in list(corr.columns):
for j in list(corr.columns):
if corr.ix[i,j]>0.7 and corr.ix[i,j] != 1:
print i, ' ',j ,' ', corr.ix[i,j]
问题是,虽然这有效,但它同时返回 corr[i,j] 和 corr[j,i],就好像它们是不同的相关性一样。 无论如何我可以只循环遍历相关矩阵的“底部三角形”吗?
最佳答案
下面是一种可能性,仍然使用类似于你的循环结构。请注意,通过限制 j
的可能值范围,您可以从循环中消除大部分重复工作。此外,虽然像您一样使用字符串进行索引可能会使某些程序更具可读性/健壮性,但使用整数索引 numpy 二维数组可能会更快(并且更简洁,因为没有 .ix
组件)。以这种方式编制索引还可以让您跳过测试您知道不需要的元素。
# Get some toy data and extract some information from it
import pandas.io.data as pd
X = pd.DataReader('aapl','yahoo')
rows, cols = X.shape
flds = list(X.columns)
# Indexing with numbers on a numpy matrix will probably be faster
corr = X.corr().values
for i in range(cols):
for j in range(i+1, cols):
if corr[i,j] > 0.7:
print flds[i], ' ', flds[j], ' ', corr[i,j]
运行上面的代码会产生如下结果:
Open High 0.99983447301
Open Low 0.999763093885
Open Close 0.999564997906
High Low 0.999744241894
High Close 0.999815965479
Low Close 0.999794304851
关于python - 如何循环遍历相关矩阵以仅提供高于特定阈值的相关对?和/或提高效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902649/