在 Python 中计算马氏距离
本教程将介绍在 Python 中求两个 NumPy 数组之间的马氏距离的方法。
使用 Python 中 scipy.spatial.distance
库中的 cdist()
函数计算马氏距离
马氏距离是点与分布之间距离的度量。如果我们想找到两个数组之间的马氏距离,我们可以使用 Python 中 scipy.spatial.distance
库中的 cdist()
函数。cdist()
函数 计算两个集合之间的距离。我们可以在输入参数中指定 mahalanobis
来查找 Mahalanobis 距离。请参考以下代码示例。
import numpy as np
from scipy.spatial.distance import cdist
x = np.array([[[1, 2, 3], [3, 4, 5], [5, 6, 7]], [[5, 6, 7], [7, 8, 9], [9, 0, 1]]])
i, j, k = x.shape
xx = x.reshape(i, j * k).T
y = np.array([[[8, 7, 6], [6, 5, 4], [4, 3, 2]], [[4, 3, 2], [2, 1, 0], [0, 1, 2]]])
yy = y.reshape(i, j * k).T
results = cdist(xx, yy, "mahalanobis")
results = np.diag(results)
print(results)
输出:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
我们使用上述代码中的 cdist()
函数计算并存储了数组 x
和 y
之间的马氏距离。我们首先使用 np.array()
函数创建了两个数组。然后我们重新调整两个数组的形状并将转置保存在新数组 xx
和 yy
中。然后我们将这些新数组传递给 cdist()
函数,并在参数中使用 cdist(xx,yy,'mahalanobis')
指定 mahalanobis
。
在 Python 中使用 numpy.einsum()
方法计算马氏距离
我们还可以使用 numpy.einsum()
方法 计算两个数组之间的马氏距离。numpy.einsum()
方法用于评估输入参数的爱因斯坦求和约定。
import numpy as np
x = np.array([[[1, 2, 3], [3, 4, 5], [5, 6, 7]], [[5, 6, 7], [7, 8, 9], [9, 0, 1]]])
i, j, k = x.shape
xx = x.reshape(i, j * k).T
y = np.array([[[8, 7, 6], [6, 5, 4], [4, 3, 2]], [[4, 3, 2], [2, 1, 0], [0, 1, 2]]])
yy = y.reshape(i, j * k).T
X = np.vstack([xx, yy])
V = np.cov(X.T)
VI = np.linalg.inv(V)
delta = xx - yy
results = np.sqrt(np.einsum("nj,jk,nk->n", delta, VI, delta))
print(results)
输出:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
我们将数组传递给 np.vstack()
函数并将值存储在 X
中。之后,我们将 X
的转置传递给 np.cov()
函数并将结果存储在 V
中。然后我们计算了矩阵 V
的乘法逆矩阵,并将结果存储在 VI
中。我们计算了 xx
和 yy
之间的差异,并将结果存储在 delta
中。最后,我们使用 results = np.sqrt(np.einsum('nj,jk,nk->n', delta, VI, delta))
计算并存储了 x
和 y
之间的马氏距离。
相关文章
在 Python 中实现 ReLU 函数
发布时间:2023/12/24 浏览次数:62 分类:Python
-
本教程讨论 Relu 函数以及如何在 Python 中实现它。Relu 函数是机器学习的基础,在使用深度学习时必不可少。
杀死一个 Python 进程
发布时间:2023/12/24 浏览次数:103 分类:Python
-
本文讨论了杀死 Python 进程的三种方法。在使用 Python 编程时,有时我们的程序会陷入无限循环。
在 Python 中获取文件扩展名
发布时间:2023/12/24 浏览次数:79 分类:Python
-
它演示了如何在 Python 中获取文件扩展名。本教程将介绍如何在 Python 中从文件名中获取文件扩展名。
在 Python 中读取文件的第一行
发布时间:2023/12/24 浏览次数:156 分类:Python
-
本教程演示了如何在 Python 中读取文本文件的第一行。在 Python 中,我们有内置的函数可以处理不同的文件操作。
在 Python 中读取二进制文件
发布时间:2023/12/24 浏览次数:175 分类:Python
-
本教程演示了如何在 Python 中读取二进制文件。程序或内部处理器对二进制文件进行解释。它包含字节作为内容。
用 Python 向文件写入字节
发布时间:2023/12/24 浏览次数:69 分类:Python
-
本教程演示了如何在 Python 中向二进制文件写入字节。本教程中,我们将介绍在 Python 中如何向二进制文件写入字节。
Python 从路径获取不带扩展名的文件名
发布时间:2023/12/24 浏览次数:55 分类:Python
-
本教程演示了如何在 Python 中从文件路径中获取不带扩展名的文件名。本教程将演示在 Python 中从文件路径中获取不带扩展名的文件名的各种方法。
在 Python 中创建一个不存在的文件
发布时间:2023/12/24 浏览次数:64 分类:Python
-
本教程演示了如何在 Python 中创建一个不存在的文件。本教程将解释如何在 Python 中创建一个不存在的文件的各种方法。
在 Python 中向文件写入字符串
发布时间:2023/12/24 浏览次数:92 分类:Python
-
有两种主要方法可用于在 Python 中将字符串写入文件,文件处理和上下文管理器。在本教程中,我们将讨论在 Python 中将字符串写入文件的方法。