numpy.linalg.norm函数是用来做什么的?

5
3个回答

5

numpy.linalg.norm 用于计算向量或矩阵的范数。


这是从numpy.linalg.norm中提取的帮助文档:

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)[source]

enter image description here


以下是从Python中的K-Means聚类中摘取的代码片段:

# Euclidean Distance Caculator
def dist(a, b, ax=1):
    return np.linalg.norm(a - b, axis=ax)

默认情况下,它采用order=None,因此只需计算(a-b)Frobenius norm,这是计算a和b之间距离的方法(使用上面的公式)。



@bgarcial 这是维基百科链接:https://en.wikipedia.org/wiki/Norm_(mathematics) - Kinght 金
同一个链接被错误地使用了两次。 - Kartik Chugh

5

我不是数学家,但这是我对“范数”的外行解释:

向量描述一个点相对于原点在空间中的位置。以下是2D空间中点[3 2]的示例:

Point in 2D space

范数是从原点到点的距离。在二维情况下,可以将该点视为直角三角形的对边相对的点,并看到范数与斜边是同一物。

Point in 2D space showing relationship between norm and hypotenuse

然而,在更高的维度中,我们描述的不再是一个普通人能理解的形状,但是从原点到点的距离仍然被称为范数。以下是在三维空间中的示例:

Point in 3D space showing the norm

我不知道为什么K-means聚类中要使用范数。您提到这是确定每个步骤中旧质心和新质心之间距离的一部分。不确定为什么会使用范数,因为您可以使用2D代数中使用的扩展在任何维度*中获取两点之间的距离:

Formula for distance between 2 points in 2D space

您只需为每个附加维度添加一个术语,例如这是一个3D版本:

Formula for distance between 2 points in 3D space

*其中尺寸是正整数


完美的解释,谢谢。 - tyasird
我在三维向量图中发现了一个错误。该点应为(4,2,2),而不是(3,2,2)。 - Robb Dunlap

1

numpy.linalg.norm函数用于获取矩阵的行或列的和。假设,

>>> c = np.array([[ 1, 2, 3],
...               [-1, 1, 4]])
>>> LA.norm(c, axis=0)
array([ 1.41421356,  2.23606798,  5.        ])
>>> LA.norm(c, axis=1)
array([ 3.74165739,  4.24264069])
>>> LA.norm(c, ord=1, axis=1)
array([6, 6])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接