用TensorFlow批量计算欧氏距离

用TensorFlow批量计算欧氏距离,tensorflow,scikit-learn,euclidean-distance,Tensorflow,Scikit Learn,Euclidean Distance,上述代码运行良好。但是对每个向量进行迭代需要花费太多的时间。 那么,有没有办法一次用多个向量计算相同的值呢。比如说vector1=np.random.rand(101000) 我更喜欢这个,而不是sklearn的欧几里德距离,因为我想计算100k向量的相似性,并想在GPU上运行它 而且也不想复制所有向量,因为所有向量已经填满了我机器70%的RAM 有没有办法通过传递一批向量来计算距离?您需要精确的欧几里德距离,还是只需要从vector1按距离排序的一组向量?如果是第二个,则删除sqrt操作将显著

上述代码运行良好。但是对每个向量进行迭代需要花费太多的时间。 那么,有没有办法一次用多个向量计算相同的值呢。比如说
vector1=np.random.rand(101000)
我更喜欢这个,而不是sklearn的欧几里德距离,因为我想计算100k向量的相似性,并想在GPU上运行它

而且也不想复制所有向量,因为所有向量已经填满了我机器70%的RAM


有没有办法通过传递一批向量来计算距离?

您需要精确的欧几里德距离,还是只需要从
vector1
按距离排序的一组向量?如果是第二个,则删除
sqrt
操作将显著加快算法速度,并保留顺序(如果
a>b
a^2>b^2
用于所有正
a,b
)。然后,您可以只在端点处对所需的向量进行sqrt,您需要精确的欧几里德距离,还是只需要从
vector1
按距离排序的一组向量?如果是第二个,则删除
sqrt
操作将显著加快算法速度,并保留顺序(如果
a>b
a^2>b^2
用于所有正
a,b
)。然后,您可以只对最后需要的向量进行sqrt
import tensorflow as tf
import numpy as np
dim = 1000
x1 = tf.placeholder('float32', shape=(None, dim))
x2 = tf.placeholder('float32', shape=(None, dim))
l2diff = tf.sqrt( tf.reduce_sum(tf.square(tf.sub(x1, x2)),reduction_indices=1))

vector1  = np.random.rand(1,1000)
all_vectors = np.random.rand(500,1000)

sess = tf.Session()
sess.run(tf.global_variables_initializer())
distances = sess.run(l2diff, feed_dict = {x1: vector1, x2: all_vectors})