如何用NumPy针对矩阵中每个向量计算元素间距离矩阵?
解决矩阵中每个向量的元素间两两距离上三角矩阵计算问题
没问题,我来帮你搞定这个需求!你要的是对输入矩阵里的每个行向量,都生成一个和一维向量时结构一样的上三角距离矩阵,最后得到一个三维数组对吧?
用NumPy的广播机制就能轻松实现,步骤如下:
- 先利用广播对每个行向量计算元素间的两两差值:把原矩阵分别扩展维度为
(n, 1, d)和(n, d, 1),做减法后会得到(n, d, d)的三维数组,其中每个(d,d)的子矩阵对应原矩阵中一个行向量的元素两两差。 - 用
np.triu()对上一步的结果取上三角部分,就能保留你想要的非零元素只在对角线及以上的结构。
直接上代码示例:
import numpy as np # 你的输入矩阵 X = np.array([[1, 2, 3], [1, 5, 7],[7, 8, 9]]) # 计算三维的上三角距离矩阵 dist_3d = np.triu(X[:, None, :] - X[:, :, None]) # 查看结果 print("第一个向量对应的上三角矩阵:") print(dist_3d[0]) print("\n第二个向量对应的上三角矩阵:") print(dist_3d[1]) print("\n第三个向量对应的上三角矩阵:") print(dist_3d[2])
运行后输出的结果就是:
第一个向量对应的上三角矩阵: [[0 1 2] [0 0 1] [0 0 0]] 第二个向量对应的上三角矩阵: [[0 4 6] [0 0 2] [0 0 0]] 第三个向量对应的上三角矩阵: [[0 1 2] [0 0 1] [0 0 0]]
完全符合你要的三维输出,每个切片对应原矩阵中一个向量的元素间两两距离上三角矩阵。
内容的提问来源于stack exchange,提问作者gorjan
相关产品推荐
相关产品推荐

