A = np.arange(6).reshape((2, 3))
B = np.arange(12).reshape((3, 4))
np.stack([np.outer(A[:, (i)], B[(i), :]) for i in range(A.shape[1])])
numpy: broadcast multiplication over one common axis of two 2d arrays