python矩阵距离计算

源代码:July在线数据分析班第一讲大林老师讲解python运算速度时,曾举例到一矩阵计算速度的例子,不是python的运算速度慢,而是跟选取的方法有关,如都说C 比python快,但是用python多线程与C的单线程比,肯定是python快。
说矩阵计算的例子:正好工作中用到距离计算,试了下果然好用:
速度
课程源代码:官网可去:https://www.julyedu.com/查询课程资料
例子代码求得距离方法,结果开个根号就是;

import numpy as np
import numpy.linalg as la
import time

X = np.array([range(0, 500), range(500, 1000)])
m, n = X.shape
print(m, n)#2行,500列矩阵

'''
D(i, j) = ||xi - xj||^2
'''
t = time.time()
D = np.zeros([n, n])
for i in range(n):
    for j in range(i + 1, n):
        D[i, j] = la.norm(X[:, i] - X[:, j]) ** 2
        D[j, i] = D[i, j]
print(time.time() - t)

'''
|xi - xi| = sqrt((xi - xj) * (xi - xj).T)
D(i, j) = (xi - xj) * (xi - xj).T
'''
t = time.time()
D = np.zeros([n, n])
for i in range(n):
    for j in range(i + 1, n):
        d = X[:, i] - X[:, j]
        D[i, j] = np.dot(d, d)
        D[j, i] = D[i, j]
print(time.time() - t)

'''
D(i, j) = (xi - xj) * (xi - xj).T
        = xi * xi.T - xi * xj.T - xj * xi.T + xj * xj.T
        = xi * xi.T - 2 * xi * xj.T + xj * xj.T
G(i,j) = xi.T * xj
'''
t = time.time()
G = np.dot(X.T, X)
D = np.zeros([n, n])
for i in range(n):
    for j in range(i + 1, n):
        D[i, j] = G[i, i] - G[i, j] * 2 + G[j,j]
        D[j, i] = D[i, j]
print(time.time() - t)

'''
H(i, j) = G(i, i)
K(i, j) = G(j, j) = H(i, j).T
D(i, j) = H(i, j) + K(i, j) - 2 * G(i, j)
'''
t = time.time()
G = np.dot(X.T, X)
H = np.tile(np.diag(G), (n, 1)) # n rows, 1 for each row
D = H + H.T - G * 2
print(time.time() - t)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值