Создать массив внешних продуктов в NumPy

У меня есть массив из n векторов длиной m. Например, сn = 3, м = 2:

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

Я хочу взять внешнее произведение каждого вектора с собой, а затем объединить их в массив квадратных матриц формы(н, м, м), Так что дляx выше я бы получил

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

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

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

Я могу сделать это сfor петля так

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

Есть ли такое обалденное выражение, которое делает это без Python?for цикл?

Бонусный вопрос: поскольку внешние продукты симметричны, мне не нужном х м операции умножения для их вычисления. Могу ли я получить эту оптимизацию симметрии от NumPy?

Ответы на вопрос(2)

Ваш ответ на вопрос