我有
(n, d)
维矩阵x
(d, L)
维矩阵c
让我们用x
表示x_b
的第b行,用c
表示c_i
的第i列。我想计算(n, L)
所包含的diff
维矩阵(b, i)
:
|| x_b - c_i ||^2,
其中条形是L2范数。
我目前的解决方案使用了
的技巧|| x - y ||^2 = ||x||^2 + ||y||^2 - 2<x, y>
我计算如下:
# (n, L), contains at (b, i) the inner product <x_b, c_i>
xc = tf.matmul(x, c)
# (n, 1), contains at row b ||x_b||^2
xx = tf.reduce_sum(tf.square(x), axis=1, keep_dims=True)
# (1, L), contains at column i ||c_i||^2
cc = tf.reduce_sum(tf.square(c), axis=0, keep_dims=True)
# (n, L), contains at (b, i):
# || x_b - c_i ||^2 = ||x_b||^2 + ||c_i||^2 - 2 * <x_b, c_i>
diff = xx + cc - 2*xc
它有效且速度相当快。但我想知道,是否有一个技巧可以让这个计算更快?