最快的计算距离的方法

时间:2017-01-13 16:10:51

标签: numpy tensorflow

我有

  • (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

它有效且速度相当快。但我想知道,是否有一个技巧可以让这个计算更快?

0 个答案:

没有答案