Python 使用 numpy.linalg.norm() 求距离矩阵 --> 如何计算?
Python Using numpy.linalg.norm() to Find Distance Matrix --> How Calculated?
我下面有一个矢量,叫做 vector:
[0.465344 0.519904]
我还有下面的矩阵 matrix_b:
[[-0.701366 0.261183]
[-0.295642 -1.41441 ]]
我使用下面的代码来计算距离矩阵。
dist_matrix = np.linalg.norm(vector - matrix_b, ord=2, axis=1)
然后我打印出 dist_matrix 以查看输出:
print (dist_matrix )
[1.19505179 2.07862222]
我不明白范数距离(即 dist_matrix)是如何从输入中计算出来的。有没有人可以赐教一下?
>>> vector = np.array([0.465344, 0.519904])
>>> matrix_b = np.array([[-0.701366, 0.261183],[-0.295642, -1.41441 ]])
>>> vector - matrix_b
array([[1.16671 , 0.258721],
[0.760986, 1.934314]])
做减法,vector
被广播成matrix_b
的形状。结果的元素因此是
vector[0] - matrix_b[0,0] vector[1] - matrix_b[0,1]
vector[0] - matrix_b[1,0] vector[1] - matrix_b[1,1]
然后,
>>> dist_matrix = np.linalg.norm(vector - matrix_b, ord=2, axis=1)
>>> dist_matrix
array([1.19505179, 2.07862222])
参考numpy.linalg.norm
的文档,可以看到axis
参数指定了计算向量范数的轴。所以在这里,axis=1
意味着将计算矩阵中每行的向量范数。
那么,ord=2
for vector norms 表示对于一个向量x
,结果是sum(abs(x)**2)**(1./2)
(这也是欧式距离的公式)。
所以,我们有,数学上:
dist_matrix[0] == (abs(vector[0] - matrix_b[0,0])**2 + abs(vector[1] - matrix_b[0,1])**2)**(1./2)
dist_matrix[1] == (abs(vector[0] - matrix_b[1,0])**2 + abs(vector[1] - matrix_b[1,1])**2)**(1./2)
我下面有一个矢量,叫做 vector:
[0.465344 0.519904]
我还有下面的矩阵 matrix_b:
[[-0.701366 0.261183]
[-0.295642 -1.41441 ]]
我使用下面的代码来计算距离矩阵。
dist_matrix = np.linalg.norm(vector - matrix_b, ord=2, axis=1)
然后我打印出 dist_matrix 以查看输出:
print (dist_matrix )
[1.19505179 2.07862222]
我不明白范数距离(即 dist_matrix)是如何从输入中计算出来的。有没有人可以赐教一下?
>>> vector = np.array([0.465344, 0.519904])
>>> matrix_b = np.array([[-0.701366, 0.261183],[-0.295642, -1.41441 ]])
>>> vector - matrix_b
array([[1.16671 , 0.258721],
[0.760986, 1.934314]])
做减法,vector
被广播成matrix_b
的形状。结果的元素因此是
vector[0] - matrix_b[0,0] vector[1] - matrix_b[0,1]
vector[0] - matrix_b[1,0] vector[1] - matrix_b[1,1]
然后,
>>> dist_matrix = np.linalg.norm(vector - matrix_b, ord=2, axis=1)
>>> dist_matrix
array([1.19505179, 2.07862222])
参考numpy.linalg.norm
的文档,可以看到axis
参数指定了计算向量范数的轴。所以在这里,axis=1
意味着将计算矩阵中每行的向量范数。
那么,ord=2
for vector norms 表示对于一个向量x
,结果是sum(abs(x)**2)**(1./2)
(这也是欧式距离的公式)。
所以,我们有,数学上:
dist_matrix[0] == (abs(vector[0] - matrix_b[0,0])**2 + abs(vector[1] - matrix_b[0,1])**2)**(1./2)
dist_matrix[1] == (abs(vector[0] - matrix_b[1,0])**2 + abs(vector[1] - matrix_b[1,1])**2)**(1./2)