Собственно ответ предоставлен пв.неверно, так как результирующий массив xy будет иметь форму (100,3,3).Правильное вещание выглядит следующим образом:
import numpy as np
from numpy import newaxis
x = np.random.randn(100, 3)
y = np.random.randn(100, 3)
xy = x[:,newaxis, :,newaxis] * y[newaxis,:,newaxis,:]
Полученный массив xy теперь имеет форму (100,100,3,3) и содержит перекрестные произведения всех пар 3-векторов в x и y:
for i,a in enumerate(x):
for j,b in enumerate(y):
if not np.alltrue(np.outer(a,b) == xy[i,j]): print("The code is wrong")
не выводит:)