我从一个小型测试集构建了一个相关矩阵输出,结果如下。真值是那些大于定义值的值(例如 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/