我有一个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]])
什么是解决这个问题的好方法?谢谢。
答案 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]])