【发布时间】:2015-02-20 14:18:44
【问题描述】:
我有两个非传统向量,我想计算它们之间的欧几里得距离。向量设置如下:
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]
【问题讨论】:
标签: python out-of-memory distance