python - 如何从 Python 中的相关矩阵中识别重要项目(无内循环)

标签 python numpy matrix correlation

我从一个小型测试集构建了一个相关矩阵输出,结果如下。真值是那些大于定义值的值(例如 results = correlation_matrix > 0.75 )

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

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

Numpy(或其他)中是否有一种方法/函数可以让我返回 True 值的行/列?当我将其用于真实数据(20 万行)时,我需要能够使用内部循环快速完成此操作。 200k*200k 检查会非常非常慢。我想一定有一个 matrix/numpy/scikit.learn 等函数可以提供这个,但我没能找到。

预期的输出是:

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

理想情况下,鉴于这是一个镜像图像将是:

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

最佳答案

要获取基于 0 的索引,一种直接的方法是使用 np.triu 屏蔽下对角线位置,然后使用 np.argwhere 获取索引-

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)

关于python - 如何从 Python 中的相关矩阵中识别重要项目(无内循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698333/

相关文章:

python - Numpy 舍入问题

python - 在 NumPy 中计算距离矩阵的有效方法

python - Pandas stack/groupby 制作一个新的数据框

python - 在 python 脚本结束后,从 python 调用的 shell 脚本会持续存在吗?

python - 删除python中numpy数组中的行

python - 矩阵向量差的有效元素级argmin

python - 有没有更Pythonic的方法来进行这个字典迭代?

python - 使用 numpy 处理点矩阵乘法组

swift - 如何动画一个矩阵一个一个地改变 Sprite ?

c - 哈希函数转矩阵