栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

“范数”等于“欧几里得距离”吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“范数”等于“欧几里得距离”吗?

甲范数是一个函数,它的矢量作为输入,并返回可被解释为“大小”,“长度”,或者说矢量的“大小”的标量值。更正式地,规范被定义为具有以下数学属性:

  • 它们相乘缩放,即对于任何标量 a范数(a· v )= | a |·范数( v __
  • 它们满足三角形不等式,即 Norm( u + v )≤Norm( u )+ Norm( v
  • 一个向量的范数是零,如果且仅当它是零矢量,即 规范( v )= 0⇔ v = 0

欧几里德范数(也称为L²范数)只是许多不同范数之一-
还有最大范数,曼哈顿范数等。单个向量的L²范数等于从该点到原点的欧几里德距离,两个向量之差的L²范数等于两点之间的欧几里得距离。


就像 @nobar 的答案说的那样,

np.linalg.norm(x - y, ord=2)
(或仅仅是
np.linalg.norm(x -y)
)将为您提供向量
x
和之间的欧几里得距离
y

由于要计算之间的欧几里德距离

a[1, :]
和所有其他行中
a
,你可以这样做快了很多,消除了
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 cdistdist = 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 resultd1 = 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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号