ドキュメントによると:
N 次元の場合、 は の最後の軸と の最後から 2 番目の
dot
軸の積の合計です。a
b
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
a
の最後の軸と最後から 2 番目の軸の合計積を計算したいのですb
が、残りの軸は同じ形状であるため、残りの軸のデカルト積を形成しません。例を挙げて説明しましょう:
a = np.random.normal(size=(11, 12, 13))
b = np.random.normal(size=(11, 12, 13, 13))
c = np.dot(a, b)
c.shape # = (11, 12, 11, 12, 13)
しかし、私は形をしたいと思います(11, 12, 13)
。ブロードキャストを使用して目的の効果を達成できます
c = np.sum(a[..., None] * b, axis=-2)
c.shape # = (11, 12, 13)
np.sum
しかし、私の配列は比較的大きいので、 ではサポートされていないように見えますがでサポートされている、並列化された BLAS 実装の機能を使用したいと考えていますnp.dot
。これを達成する方法についてのアイデアはありますか?