2
N個の行に対してドット積を計算する必要があります。各行に対して、1xM倍MxM倍Mx1を計算する必要があるとします。私が1つの行だけを見ていたら、この計算から1x1を得ました。しかし、私はN行を持っているので、私は行を積み重ね、ドットプロダクトに供給すると思った。しかし、結果としてNxN行列が得られます。私が必要とする結果は対角線上にありますが、スペースを無駄にしないこの計算を行うより速い方法がありますか?理想的には、結果としてNxN行列ではなく、Nx1ベクトルで終わりたいと思います。効率的に1xMを計算するMxM Times Mx1、N Times
例
シングル行
r = np.array([[1,2]]).T
R = np.array([[2,2],[2,2]])
はそうように、インナードット積伴って含む
[[18]]
複数の行
rs = np.array([[1,2],[4,4]]).T
R = np.array([[2,2],[2,2]])
print np.dot(np.dot(rs.T,R), rs)
[[ 18 48]
[ 48 128]]
私のマシン上で、私の三引数einsumは大きな配列にあなたのアプローチを使用するよりも、実際に10倍遅くなります。 (diag 7.4ms、einsum + dot = 3.6,3-einsum = 73.2)。あまりにも悪い、私はそれを好きだった..:/ – DSM
@DSMうん、私もそれが好きだった、 'einsum 'の中のすべてをすることは、私が思った良い仕事だった!おそらく、人々は選択肢を好むかもしれない? :) – Divakar