I have a NumPy array A of shape (n, m) and dtype bool:
array([[ True, False, False],
[ True, True, True],
[False, True, True],
[False, True, False]])
I would like to get the result R of shape (m, m) of dtype int:
array([[0, 3, 2],
[3, 0, 1],
[2, 1, 0]])
where R[i, j] is the number of elements that are different in columns i and j. So, for example:
R[0, 0] = (A[:, 0] != A[:, 0]).sum()
R[2, 1] = (A[:, 2] != A[:, 1]).sum()
R[0, 2] = (A[:, 0] != A[:, 2]).sum()
...
Is there a way to achieve this with NumPy?
>Solution :
Yes, this is pretty straightforward with some broadcasting:
R = (A[:, None, :] != A[:, :, None]).sum(axis=0)