以下の計算を高速で行う方法を教えていただきたいです.

import numpy as np
# 本当は10万くらいの長さ
a = np.array([[1,2,3],[4,5,6]])
# こっちも10万くらいの長さ
b = np.array([ [ [1,2,3],[4,5,6],[7,8,9] ], [ [1,2,3],[4,5,6],[7,8,9] ] ])
res = []
for i in range(a.shape[0]):
    for j in range(b.shape[0]):
        c = np.dot(a[i],b[i,j])
        res.append(c)

ベクトルが格納された配列(行列)と行列が格納された配列(三次テンソル)の積を上記のようなfor文を利用せず高速に計算する方法がありましたら,教えていただきたいです.