```
np.outer(x, x)
x[:,None] * x[None,*]
np.dot(x[:,None], x[None,*])
```

np.einsum is faster!

#### Reference

https://stackoverflow.com/questions/23566515/multiplication-of-1d-arrays-in-numpy

https://stackoverflow.com/questions/47624948/calculating-the-outer-product-for-a-sequence-of-numpy-ndarrays