python – “规范”是否等同于“欧几里德距离”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – “规范”是否等同于“欧几里德距离”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1976字,纯文字阅读大概需要3分钟。
内容图文
我不确定“规范”和“欧几里德距离”是否意味着同样的事情.请你帮我解决这个问题.
我有一个n乘m阵列a,其中m> 3.我想计算第二个数据点a [1,:]与所有其他点(包括其自身)之间的Eculidean距离.所以我使用了np.linalg.norm,它输出了两个给定点的范数.但我不知道这是否是获得ED的正确方法.
import numpy as np
a = np.array([[0, 0, 0 ,0 ], [1, 1 , 1, 1],[2,2, 2, 3], [3,5, 1, 5]])
N = a.shape[0] # number of row
pos = a[1,:] # pick out the second data point.
dist = np.zeros((N,1), dtype=np.float64)
for i in range(N):
dist[i]= np.linalg.norm(a[i,:] - pos)
解决方法:
norm是一个函数,它将矢量作为输入并返回一个标量值,该标量值可以解释为该矢量的“大小”,“长度”或“幅度”.更正式地,规范被定义为具有以下数学属性:
>它们是乘法缩放,即Norm(a·v)= | a |·Norm(v)对于任何标量a
>它们满足三角不等式,即Norm(u v)≤Norm(u)Norm(v)
>当且仅当它是零向量时,向量的范数为零,即Norm(v)=0?v= 0
欧几里德范数(也称为L²范数)只是众多不同规范中的一种 – 也有最大范数,曼哈顿范数等.单个矢量的L²范数相当于从该点到原点的欧几里德距离. ,两个向量之差的L²范数等于两个点之间的欧几里德距离.
正如@ n??obar的回答所说,np.linalg.norm(x – y,ord = 2)(或者只是np.linalg.norm(x – y))将给出向量x和y之间的欧几里德距离.
由于你想要计算a中的[1,:]和每隔一行之间的欧几里德距离,你可以通过消除for循环并在a的行上广播来更快地完成这项工作:
dist = np.linalg.norm(a[1:2] - a, axis=1)
使用广播自己计算欧几里德距离也很容易:
dist = np.sqrt(((a[1:2] - a) ** 2).sum(1))
最快的方法可能是scipy.spatial.distance.cdist:
from scipy.spatial.distance import cdist
dist = cdist(a[1:2], a)[0]
(1000,1000)数组的某些时序:
a = np.random.randn(1000, 1000)
%timeit np.linalg.norm(a[1:2] - a, axis=1)
# 100 loops, best of 3: 5.43 ms per loop
%timeit np.sqrt(((a[1:2] - a) ** 2).sum(1))
# 100 loops, best of 3: 5.5 ms per loop
%timeit cdist(a[1:2], a)[0]
# 1000 loops, best of 3: 1.38 ms per loop
# check that all 3 methods return the same result
d1 = np.linalg.norm(a[1:2] - a, axis=1)
d2 = np.sqrt(((a[1:2] - a) ** 2).sum(1))
d3 = cdist(a[1:2], a)[0]
assert np.allclose(d1, d2) and np.allclose(d1, d3)
内容总结
以上是互联网集市为您收集整理的python – “规范”是否等同于“欧几里德距离”?全部内容,希望文章能够帮你解决python – “规范”是否等同于“欧几里德距离”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。