Создать массив внешних продуктов в 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?