Scipy是一个开源的python算法库和数据工具包 scipy包含的模块有最优化,线性代数,积分,插值,特殊函数,快速傅里叶变换,信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
使用距离度量 研究在欧式空间和非欧式空间里的距离向量 欧式空间
非欧式空间
在Numpy中,array用于表示通用的N维空间,Matrix则特定用于线性代数 使用array时,运算符*用于计算数量积(点乘),函数.dot()计算矢量积
In [1]:
# 使用距离度量
import numpy as np
# 定义欧式距离
def euclidean_distance(x,y):
if len(x)==len(y):
return np.sqrt(np.sum(np.power((x-y),2)))
else:
print u'应该输入相同的长度'
return None
In [2]:
# 定义Lr-Norm距离
def lrNorm_distance(x,y,power):
if len(x)==len(y):
return np.power(np.sum(np.power((x-y),power)),(1/(1.0*power)))
else:
print u'应该输入相同的长度'
return None
In [3]:
# 定义余弦距离
def cosine_distance(x,y):
if len(x)==len(y):
return np.dot(x,y)/np.sqrt(np.dot(x,x)*np.dot(y,y))
else:
print u'请输入相同的长度'
return None
In [4]:
def jaccard_distance(x,y):
set_x = set(x)
set_y = set(y)
return 1 - len(set_x.intersection(set_y))/len(set_x.union(set_y))
In [5]:
#
def hamming_distance(x,y):
diff = 0
if len(x) == len(y):
for cha1,cha2 in zip(x,y):
if cha1!=cha2:
diff +=1
return diff
else:
print u'请输入相同的长度'
return None
In [7]:
# 主函数调用上述定义的函数
if __name__ == "__main__":
# 给出样例,给出了两个相同的点
x = np.asarray([1,2,3])
y = np.asarray([1,2,3])
# 打印输出欧式距离
print euclidean_distance(x,y)
# r=2,调用lr_Norm计算欧式距离
print lrNorm_distance(x,y,2)
# 曼哈顿距离或者街道距离
print lrNorm_distance(x,y,1)
# 计算余弦距离
x = [1,1]
y = [1,0]
print u'余弦距离'
print cosine_distance(x,y)
# 计算jaccard距离的样例数据
x = [1,2,3]
y = [1,1,1]
print jaccard_distance(x,y)
# 计算Hamming距离的样例数据
x = [11001]
y = [11011]
print hamming_distance(x,y)