从每行python的匹配值创建二进制矩阵

时间:2018-10-26 03:57:40

标签: python pandas numpy matrix

我有以下问题。我想创建一个看起来像这样的二进制矩阵(对不起,我不得不用Excel来说明)

enter image description here

来自此1列的csv文件:

enter image description here

基本上,我希望Python读取该列,比较每一行,如果2行具有相同的值,则该对在矩阵上的坐标将取值为1,否则为0。

因此,如果我有10行,我将有一个10 x 10的矩阵,对角线全为1,而且上三角形看起来与上三角形完全相同,由对角线分隔。

在Python和Pandas / Numpy中有没有办法做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:2)

最简单的方法就是比较数组及其转置的二维空间,例如:

In []:
a = np.array(['a', 'b', 'a', 'c'])
(a[:,None] == a[None,:]).astype(int)

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

注意:a[None,:]的形状为(1, 4)a[:,None](相当于a[None,:].T)的形状为(4, 1),当您比较它们时,将结果广播到方阵(4, 4)