首页 > 编程语言 >python_两两比较计算相似矩阵

python_两两比较计算相似矩阵

时间:2023-10-13 12:00:55浏览次数:57  
标签:p2 distance p1 python 矩阵 相似矩阵 scipy 计算 spatial

距离矩阵

余弦距离矩阵

 余弦距离使用两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比欧氏距离,余弦距离更加注重两个向量在方向上的差异

点集内或矩阵内两两元素之间的距离矩阵

##简单使用两重循环
def compute_squared_EDM_method(X):
  # 获得矩阵都行和列,因为是行向量,因此一共有n个向量
  n,m = X.shape
  # 因为有n个向量,距离矩阵是n x n
  D = np.zeros([n, n])
  # 迭代求解向量的距离
  for i in range(n):
    for j in range(i+1, n):
      # la.norm()求向量都范数,默认是2范数
      D[i,j] = la.norm(X[i, :] - X[j, :])
      D[j,i] = D[i,j]
  return D

简单使用两重循环

 ###自定义的方式
dist = lambda p1, p2: sqrt(((p1-p2)**2).sum())
dm = np.asarray([[dist(p1, p2) for p2 in xy_list] for p1 in xy_list])

其他工具

 功能在python内或numpy内有现成的工具包
from scipy.spatial import distance
# 以下两种方式视情况选择
scipy.spatial.distance.pdist()
scipy.spatial.distance.cdist()

import numpy as np
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform
A=np.array([[1,2],
            [3,4],
            [5,6],
            [7,8]])
# A是一个向量矩阵:euclidean代表欧式距离
distA=pdist(A,metric='euclidean')
# 将distA数组变成一个矩阵
distB = squareform(distA)

示例

import pandas as pd
from scipy.spatial import distance_matrix
    
data = [[5, 7], [7, 3], [8, 1]]
ctys = ['Boston', 'Phoenix', 'New York']
df = pd.DataFrame(data, columns=['xcord', 'ycord'], index=ctys)
pd.DataFrame(distance_matrix(df.values, df.values), index=df.index, columns=df.index)


###自定义的方式
dist = lambda p1, p2: sqrt(((p1-p2)**2).sum())
dm = np.asarray([[dist(p1, p2) for p2 in xy_list] for p1 in xy_list])

使用矩阵内积等方式

 矩阵內积双重循环

IOU计算,邻接矩阵法

 邻接矩阵是图论中的一种表示方法,它通过矩阵来表示一个图中每个结点之间的连通关系。
 在Python 中,你可以使用列表或NumPy 数组来生成邻接矩阵

图理论

 广度、深度优先路径搜索算法

参考

Python之向量(Vector)距离矩阵计算 https://zhuanlan.zhihu.com/p/77034615
https://zhuanlan.zhihu.com/p/354289511
 Python 图_系列之基于邻接矩阵实现广度、深度优先路径搜索算法 https://blog.51cto.com/gkcode/5174729
 Making a pairwise distance matrix in pandas https://drawingfromdata.com/pandas/clustering/making-a-pairwise-distance-matrix-in-pandas.html
 https://docs.scipy.org/doc/scipy/reference/spatial.html

标签:p2,distance,p1,python,矩阵,相似矩阵,scipy,计算,spatial
From: https://www.cnblogs.com/ytwang/p/17761781.html

相关文章

  • Python中的布尔值用途及特点介绍!
    Python中数据类型有很多种,而布尔值就是其中之一,是比较常见的数据类型。Python中bool表示布尔值,布尔值有两个True和Flase,常配合Python的条件语句来使用,一起来看看详细的内容介绍。Python中布尔值是什么?Python中的布尔值是一种基本数据类型,它的取值只有两种True和Flase......
  • python学习笔记3 遍历目录, 列出文件名
    importosdeflistDir(curPath,pixLen):list=[]#print("当前路径:"+curPath)files=os.listdir(curPath)forpathinfiles:fullPath=os.path.join(curPath,path)ifos.path.isfile(fullPath):#append......
  • 计算机内存不足,若要还原足够的内存以使程序正常工作,请保存文件,然后关闭或重新启动所有
    电脑提示计算机内存不足,若要还原足够的内存以使程序正常工作,请保存文件,然后关闭或重新启动所有打开的程序。遇到这种问题其实是因为没有设置虚拟内存或者设置太小了 1、更改虚拟内存的操作,在桌面上右键单击计算机,选择属性;2、选择高级系统设置,弹出系统属性窗口;3、直接定位到......
  • 几何计算-基于Turf.js实现多边形的拆分及合并
    几何计算-基于Turf.js实现多边形的拆分及合并阿飞​红星美凯龙3D前端开发工程师​关注他 10人赞同了该文章❝JSAPIGL近期为支持物流行业实现了几何图形编辑器,用户可通过编辑器接口进行点、线、面、圆的绘制和编辑。在物流行业中常见的使用场景......
  • python 高程灰度图tif转png
    importcv2importnumpyasnpim=cv2.imread('in.tif',flags=(cv2.IMREAD_GRAYSCALE|cv2.IMREAD_ANYDEPTH))height=im.shape[0]width=im.shape[1]print(height)print(width)nmin=4294967296nmax=0forrowinrange(height):forcolinrange(......
  • Go语言中的数学计算
    数学常量math.E //自然对数的底,2.718281828459045math.Pi //圆周率,3.141592653589793math.Phi //黄金分割,长/短,1.618033988749895math.MaxInt //9223372036854775807uint64(math.MaxUint) //得先把MaxUint转成uint64才能输出,18446744073709551615math.MaxFloat64 //1.797693......
  • 制作python3.10镜像带gunicorn
    DockerfileFromharbor.goldwind.com/library/centos:7.9.2009ADDPython-3.10.13.tgz/dataRUNyuminstallmakexz-develpython-developenldap-develbzip2-develexpat-develgdbm-develreadline-develsqlite-develgccgcc-c++openssl-develxorg-x11-xauthzli......
  • python -- 定义函数 def 后面的 ->,:表示的含义
    -> 常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数返回的类型。: 表示参数的类型建议符示例:defadd(x:int,y:int)->bool:if(x>y):returnTrueelse:returFalse这里,表明了函数的参数传入为int类型,输出的类型为bool类型。......
  • python中的各种符号(欢迎补充)
    #!非python特有的语法,主要用在需要在Linux系统执行脚本的时候,shell脚本头顶也会加这个玩意英文名叫“Sha-bang”,告诉Shell使用什么命令执行该脚本,在Linux系统执行python脚本,第一行加这个是告诉系统用哪个bash或者哪个解释器去执行脚本(就这么简单理解吧) ......
  • Python下划线命名模式
    五种Python下划线模式速查表: 单前导下划线:_var当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。它是对程序员的一个提示-意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅......