import matplotlib.pyplot as plt
import numpy as np
from numpy.linalg import norm

def cosine_similarity(arr1:np.ndarray, arr2:np.ndarray)->float:
    dot_product = np.dot(arr1, arr2)
    magnitude = norm(arr1) * norm(arr2)
    similarity = dot_product / magnitude
    return similarity

def euclidean_distance(arr1:np.ndarray, arr2:np.ndarray)->float:
    return 1 / (1 + np.linalg.norm(arr1 - arr2))    

black = np.array([0.93036434, 0.80134155, 0.82428051, 0.88877041, 0.90235719,
       0.86631497, 0.82428051, 0.84878065, 0.99113482, 0.81413637,
       0.82428051, 0.80268685, 0.76705671, 0.76605398, 0.82428051,
       0.81137288, 0.83886563, 0.80749507, 0.82428051])
blue = np.array([1., 0.75256457, 0.78572852, 0.84459419, 0.88112504,
       0.82160288, 0.78572852, 0.8022456 , 0.9949841 , 0.78979966,
       0.78572852, 0.76791598, 0.70410357, 0.72986952, 0.78572852,
       0.76683488, 0.78731431, 0.77301876, 0.78572852])  
green = np.array([1., 0.62172262, 0.60678783, 0.57714708, 0.73848085,
       0.69695676, 0.60678783, 0.58584646, 0.60622072, 0.6202182 ,
       0.60678783, 0.57949767, 0.52131047, 0.5814518 , 0.60678783,
       0.5958478 , 0.62959938, 0.60829778, 0.60678783]) 

fig = plt.figure(figsize=(8, 4), dpi=80)

gs = fig.add_gridspec(1, hspace=0)
axs = gs.subplots()

print("cosine_similarity = ", cosine_similarity(black, blue))
print("cosine_similarity = ", cosine_similarity(black, green))

print("euclidean_distance = ", euclidean_distance(black, blue))
print("euclidean_distance = ", euclidean_distance(black, green))

axs.plot(black, color='black')
axs.plot(blue, color='blue')
axs.plot(green, color='green')    

fig.tight_layout()
plt.show()              

angular similarity

我试图根据形状而不是距离在两个numpy数组之间创建一个相似因子.即使形状(蓝色和绿色)在视觉上是不同的,代码打印几乎相同的因素.

cosine_similarity =  0.9993680126707705
cosine_similarity =  0.9914859250612972

推荐答案

你可以用numpy.corrcoeff

例如:

import numpy as np
print(np.corrcoeff(black, blue)[0,1]) # Gives 0.96027588
print(np.corrcoff(black, green)[0,1]) # Gives 0.52967232

Python相关问答推荐

在Python和matlab中显示不同 colored颜色 的图像

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

Python上的Instagram API:缺少client_id参数"

如何使用数组的最小条目拆分数组

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

在Python中动态计算范围

SQLAlchemy Like ALL ORM analog

导入...从...混乱

不能使用Gekko方程'

Django—cte给出:QuerySet对象没有属性with_cte''''

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

为什么\b在这个正则表达式中不解释为反斜杠

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

Python—为什么我的代码返回一个TypeError

如何在Great Table中处理inf和nans

从源代码显示不同的输出(机器学习)(Python)

在MongoDB文档中仅返回数组字段

对包含JSON列的DataFrame进行分组