Crear matriz de productos externos en numpy

Tengo una serie de n vectores de longitud m. Por ejemplo, conn = 3, m = 2:

x = array([[1, 2], [3, 4], [5,6]])

Quiero tomar el producto exterior de cada vector consigo mismo, luego concatenarlos en una matriz de matrices cuadradas de forma(n, m, m). Así que para elx arriba obtendría

array([[[ 1,  2],
        [ 2,  4]],

       [[ 9, 12],
        [12, 16]],

       [[25, 30],
        [30, 36]]])

Puedo hacer esto con unfor bucle como tal

np.concatenate([np.outer(v, v) for v in x]).reshape(3, 2, 2)

¿Hay una expresión numpy que hace esto sin el Pythonfor ¿lazo?

Pregunta extra: ya que los productos externos son simétricos, no necesitom x m Operaciones de multiplicación para calcularlas. ¿Puedo obtener esta optimización de simetría de numpy?

Respuestas a la pregunta(2)

Su respuesta a la pregunta