numpyとtensorflowでは、小さな行列の形がより大きい行列の接尾辞である場合、異なる次元の行列(またはテンソル)を加えることができます。これは一例です。これらの二つの行列演算x+y
については異なる次元の行列を追加する
x = np.ndarray(shape=(10, 7, 5), dtype = float)
y = np.ndarray(shape=(7, 5), dtype = float)
があるショートカットの:私の場合は
for a in range(10):
for b in range(7):
for b in range(5):
result[a,b,c] = x[a,b,c] + y[b,c]
しかし、私は形状(10,7,5)
と(10,5)
の行列があり、同様に私が実行したいと思いますこの場合しかしで
for a in range(10):
for b in range(7):
for b in range(5):
result[a,b,c] = x[a,b,c] + y[a,c]
^
:+
操作同様のロジックを使用してnumpyもtensorflowも私がしたいことを理解していないので、操作は失敗します。この操作を効率的に実行できる方法はありますか(自分自身でPythonループを書く必要はありません)?これまでのところ、私は私はこのようeinsum使用して形状(10,7,5)
の一時的な行列z
をご紹介できることを考え出してきて
:
z = np.einsum('ij,k->ikj', y, np.ones(7))
x + z
をしかし、これは明示的な3次元マトリックス(またはテンソル)を作成し、可能ならば、私はそれを避けることを好むでしょう。 numpyので
で見つけることができますか? – Kuba
@Kuba試してください: 'x + tf.expand_dims(y、1)'?ポストに追加されました。 – Divakar
'tf.expand_dims'が動作します!私は答えを受け入れた – Kuba