脾气暴躁,观察中变量对的出现频率

时间:2019-06-27 18:15:16

标签: python arrays numpy

我有一个MxN 2d numpy数组“ A”,其中M是观察数,N是要检查的变量数。

A中的每个条目可以为1或0,1表示该观测值中存在该变量,0表示不存在该变量。

就变量的存在而言,我想创建一个互频的NxN矩阵“ B”。在“ B”中索引[i,j]的条目将指“ A”中变量i和变量j一起出现的行数。

例如:

矩阵A具有4个观测值和3个变量:

array([[1, 1, 0],
       [1, 1, 0],
       [0, 1, 1],
       [1, 0, 0]])

创建B将产生:

array([[3, 2, 0],
       [2, 3, 1],
       [0, 1, 1]])

什么是解决这个问题的好方法?谢谢。

1 个答案:

答案 0 :(得分:4)

您可以使用matmul用矩阵A乘以矩阵A的转置,得到所需的答案。

a = np.array(
    [[1, 1, 0],
     [1, 1, 0],
     [0, 1, 1],
     [1, 0, 0]]
)

>>> np.matmul(a.T, a)
array([[3, 2, 0],
       [2, 3, 1],
       [0, 1, 1]])