我有两个非传统向量,我想计算它们之间的欧几里得距离。这些向量设置如下:
line1 = '2:20 3:20 5:10 6:10 10:20'
line2 = '1:18 2:20 4:10 6:10 8:20 9:10 10:10'
对于每个元素,第一个数字是向量中的位置,第二个数字是值(例如,2:20表示在向量中的第2个元素的值为20)。因此,line1的向量为(0,20,20,0,10,10,0,0,0,20),line2的向量为(18,20,0,10,0,10,0,20,10,10)。
我编写了以下程序,它运行得很好。问题是我有巨大的向量,并且我想将它们与数千个其他向量进行比较。当我尝试这样运行它时,我的计算机开始给出内存错误。是否有一种方法可以在不实际创建具有许多0条目的长向量的情况下计算设置为此方式的两个向量之间的欧几里得距离?
def vec_line(line):
vector = [0]*10
datapoints = line.split(' ')
for d,datapoint in enumerate(datapoints):
element = int(datapoint.split(':')[0])
value = float(datapoint.split(':')[1])
vector[element-1]=value
npvec = np.array(vector)
return npvec
vector1 = vec_line(line1)
vector2 = vec_line(line2)
dist = np.linalg.norm(vector1-vector2)
print dist
--> [39.0384425919]