Простейшим способом было бы просто сравнить массив с его транспонированием в 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)
.