我有两个张量A
和B
,形状[10 5]
。如何计算C
形状[10 5 5]
的张量C[x, i, j] = A[x, i] + B[x, j]
,以便{{1}}?
编辑:这是外部产品的总和,而不是外部产品本身。
答案 0 :(得分:3)
比@ user1735003的答案稍微更具可读性和简洁性:
A[:, :, None] + B[:, None, :]
(实际上,另一个答案换了轴)
答案 1 :(得分:0)
目前我正在使用属性log(e^x * e^y) == x+y
来完成matmul
操作的添加:
op1 = tf.reshape(tf.exp(A), [10, -1, 1])
op2 = tf.reshape(tf.exp(B), [10, 1, -1])
C = tf.log(tf.matmul(op1, op2))
但我猜测会有更简单/更快的出路。
答案 2 :(得分:0)
你可以依靠broadcasting。
op1 = tf.expand_dims(A, axis=2)
op2 = tf.expand_dims(B, axis=1)
C = tf.add(op1, op2)
请注意@MaxB的解决方案与此不相同,因为运算符[]
相当于对strided_slice
的调用,而不是expand_dims
。