“范数”等于“欧几里得距离”吗?
我不确定“范数”和“欧几里得距离" title="欧几里得距离">欧几里得距离”是否是同一意思。请您能帮我这个区别。
我有一个n
bym
数组a
,其中m
>3。我想计算第二个数据点a[1,:]
到所有其他点(包括它自己)之间的Eculidean距离。因此,我使用np.linalg.norm
,输出两个给定点的范数。但是我不知道这是否是获得ED的正确方法。
import numpy as npa = 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)
回答:
甲范数是一个函数,它的矢量作为输入,并返回可被解释为“大小”,“长度”,或者说矢量的“大小”的标量值。更正式地,规范被定义为具有以下数学属性:
- 它们相乘缩放,即对于任何标量 a , 范数(a· )= | a |·范数( ) __
- 它们满足三角形不等式,即 Norm( + )≤Norm( )+ Norm( )
- 一个向量的范数是零,如果且仅当它是零矢量,即 规范( )= 0⇔ =
欧几里德范数(也称为L²范数)只是许多不同范数之一-
还有最大范数,曼哈顿范数等。单个向量的L²范数等于从该点到原点的欧几里德距离,两个向量之差的L²范数等于两点之间的欧几里得距离。
就像 的答案说的那样,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 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)
以上是 “范数”等于“欧几里得距离”吗? 的全部内容, 来源链接: utcz.com/qa/429079.html