我有以下问题。我想创建一个看起来像这样的二进制矩阵(对不起,我不得不用Excel来说明)
来自此1列的csv文件:
基本上,我希望Python读取该列,比较每一行,如果2行具有相同的值,则该对在矩阵上的坐标将取值为1,否则为0。
因此,如果我有10行,我将有一个10 x 10的矩阵,对角线全为1,而且上三角形看起来与上三角形完全相同,由对角线分隔。
在Python和Pandas / Numpy中有没有办法做到这一点?
非常感谢!
答案 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)
。