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)
```