2017-08-15 16 views
4

我已经建立了一个小型测试集的相关矩阵输出,并以下列结果为准。真值是那些大于所定义的值(例如结果= correlation_matrix> 0.75)如何从Python中的相关矩阵识别重要项目(无内部循环)

[[False False False True] 
[False False True False] 
[False True False True] 
[ True False True False]] 

注意,我也伪造对角线(左上至右下)。我也只需要矩阵的一半,因为它是一个镜像左上角/右下角。

Numpy(或其他)有没有一种方法/函数来返回值为True的行/列?当我用真实数据(200k行)时,我需要使用内部循环快速执行此操作而不使用。 200k * 200k的检查将会非常缓慢。我想应该有一个矩阵/ numpy/scikit.learn等功能,将提供这个,但我一直没能找到一个。

从这个预期输出是:

[[1, 4], [2, 3], [3, 2], [3, 4], [4, 1], [4, 3]] 

理想的情况下,考虑到这是一个镜像将是:

[[1, 4], [2, 3], [3, 4]] 
+0

那么,什么是对的样本预期的输出? – Divakar

+0

Ahhhh - 优点。我会更新问题 –

回答

4

要获得与基于0索引的索引,一个直前进的方法是用np.triu掩饰掉较低的对角位置,然后用np.argwhere -

np.argwhere(np.triu(a)) 
np.argwhere(np.triu(a)) 

要掩盖对角线位置,请使用np.triu(a,1)

另一种方法是使用与broadcasting的帮助下创建了一个明确的面具 -

r = np.arange(a.shape[0]) 
a[r[:,None] >= r] = 0 # Note that this changes input array 
indices = np.argwhere(a) 
+0

谢谢 - 解决了上三角位肯定 –

+0

其实 - 完全解决它。真棒。 –