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