numpy.linalg.norm 方法的功能是什么?
在这个Kmeans聚类示例中,numpy.linalg.norm 函数用于获取移动质心步骤中新质心和旧质心之间的距离,但我无法理解它本身的含义。
有人能给我一些关于这个Kmeans聚类上下文的想法吗?
一个向量的范数是什么?
numpy.linalg.norm 方法的功能是什么?
在这个Kmeans聚类示例中,numpy.linalg.norm 函数用于获取移动质心步骤中新质心和旧质心之间的距离,但我无法理解它本身的含义。
有人能给我一些关于这个Kmeans聚类上下文的想法吗?
一个向量的范数是什么?
numpy.linalg.norm
用于计算向量或矩阵的范数。
这是从numpy.linalg.norm中提取的帮助文档:
numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)[source]
以下是从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之间距离的方法(使用上面的公式)。
我不是数学家,但这是我对“范数”的外行解释:
向量描述一个点相对于原点在空间中的位置。以下是2D空间中点[3 2]的示例:
范数是从原点到点的距离。在二维情况下,可以将该点视为直角三角形的对边相对的点,并看到范数与斜边是同一物。
然而,在更高的维度中,我们描述的不再是一个普通人能理解的形状,但是从原点到点的距离仍然被称为范数。以下是在三维空间中的示例:我不知道为什么K-means聚类中要使用范数。您提到这是确定每个步骤中旧质心和新质心之间距离的一部分。不确定为什么会使用范数,因为您可以使用2D代数中使用的扩展在任何维度*中获取两点之间的距离:
您只需为每个附加维度添加一个术语,例如这是一个3D版本:
*其中尺寸是正整数
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])