多列数据的欧几里得距离
我的数据看起来是这样的:
data =
2.29 2.048333333 2 2
2.29 2.048333333 2 2
2.29 2 2 2
2.29 2.064444444 2 2
我想计算列与列之间的欧几里得距离。结果会是一个4X4的矩阵,矩阵对角线上的元素都是0,因为它们是相同的。
我该怎么高效地做到这一点呢?
到目前为止,我只知道怎么计算两列之间的欧几里得距离。
我是不是应该用循环多次来计算它们呢?
2 个回答
1
如果数据是numpy数组,这段代码可能会更高效。
dist = np.empty_like(data)
for i, x in enumerate(data):
dist[:, i] = np.sqrt(np.sum((data - x)**2, axis=1))
1
试试这个:
def main(data):
total = []
n = len(data)
for i in range(n):
tmp = []
for j in range(n):
a = data[i];
b = data[j]
tmp.append(dist(data[i],data[j]))
total.append(tmp)
return total
def dist(a,b):
tmp = [pow(a - b,2) for a, b in zip(a, b)]
return pow(sum(tmp),0.5);
def output(t):#this function is not necessary and is just for tidiness
n = len(t)
for i in range(n):
for j in range(n):
print t[i][j],"\t\t\t",
print "\n"
data = [[1,1,1],[1,2,3],[0,0,0]]#just for test
t = main(data)
output(t)