if the `_anosim` method is slow, then one straightforward optimization can be made with:

```python
11:11:51 (mcdonadt@Daniels-MacBook-Pro-2):/Users/mcdonadt
> a = array([1,2,0,0,1,2])

11:12:06 (mcdonadt@Daniels-MacBook-Pro-2):/Users/mcdonadt
> a == a
Out[2]: array([ True,  True,  True,  True,  True,  True], dtype=bool)

11:12:10 (mcdonadt@Daniels-MacBook-Pro-2):/Users/mcdonadt
> a == a[:,newaxis]
Out[3]:
array([[ True, False, False, False,  True, False],
       [False,  True, False, False, False,  True],
       [False, False,  True,  True, False, False],
       [False, False,  True,  True, False, False],
       [ True, False, False, False,  True, False],
       [False,  True, False, False, False,  True]], dtype=bool)
```

If this route is taken, then it probably would help to pass in arrays instead of dicts as well, but that could be more annoying to modify