迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中计算马氏距离

作者:迹忆客 最近更新:2023/12/21 浏览次数:

本教程将介绍在 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() 函数计算并存储了数组 xy 之间的马氏距离。我们首先使用 np.array() 函数创建了两个数组。然后我们重新调整两个数组的形状并将转置保存在新数组 xxyy 中。然后我们将这些新数组传递给 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 中。我们计算了 xxyy 之间的差异,并将结果存储在 delta 中。最后,我们使用 results = np.sqrt(np.einsum('nj,jk,nk->n', delta, VI, delta)) 计算并存储了 xy 之间的马氏距离。

上一篇:在 Python 中实现 ReLU 函数

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 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 中将字符串写入文件的方法。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便