【问题标题】:euclidean distance with multiple column of data具有多列数据的欧几里得距离
【发布时间】:2014-04-05 09:10:06
【问题描述】:

我的数据如下所示:

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,因为它们是相同的。

我怎样才能有效地做到这一点?

到目前为止,我只能找出两列之间的欧式距离

我应该使用循环多次使用它们吗?

【问题讨论】:

  • 你能展示一下你到目前为止写的代码吗?循环通常是一个好主意,可以多次执行相同的操作。

标签: python numpy scipy distance


【解决方案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)

【讨论】:

    【解决方案2】:

    如果data是numpy数组,这段代码可能效率更高。

    dist = np.empty_like(data)
    for i, x in enumerate(data):
        dist[:, i] = np.sqrt(np.sum((data - x)**2, axis=1)) 
    

    【讨论】:

    • 为什么不使用scipy.spatial.distnace.cdist(data.T,data.T)
    • 好建议!谢谢
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2021-01-28
    • 2015-07-15
    • 2014-02-04
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多