FingerprintSimilarity和BulkTanimotoSimilarity的区别

FingerprintSimilarityBulkTanimotoSimilarity 是 RDKit 库中用于计算化学分子相似度的两种方法,它们的主要区别在于输入格式和效率

1. FingerprintSimilarity

  • 作用: 计算两个化学指纹之间的相似性(Tanimoto 相似度)。
  • 用法:
    • 适合计算单对分子的相似度。
    • 接受两个指纹对象作为输入。
    • 返回一个介于 0 到 1 之间的浮点值,表示两个指纹的 Tanimoto 相似度。
from rdkit import Chem
from rdkit.Chem import AllChem, DataStructsmol1 = Chem.MolFromSmiles('CCO')
mol2 = Chem.MolFromSmiles('CCN')
fp1 = AllChem.GetMorganFingerprintAsBitVect(mol1, 2)
fp2 = AllChem.GetMorganFingerprintAsBitVect(mol2, 2)similarity = DataStructs.FingerprintSimilarity(fp1, fp2)
print("Tanimoto Similarity:", similarity)

2. BulkTanimotoSimilarity

  • 作用: 计算一个指纹与一组指纹之间的相似性。
  • 用法:
    • 适合批量计算一个指纹与多个指纹之间的相似度。
    • 接受一个指纹对象和一个指纹列表作为输入。
    • 返回一个浮点列表,其中每个元素表示输入指纹与列表中相应指纹的 Tanimoto 相似度。
    • 更高效,因为它在内部做了批处理优化。
from rdkit import Chem
from rdkit.Chem import AllChem, DataStructsmol1 = Chem.MolFromSmiles('CCO')
mol_list = [Chem.MolFromSmiles('CCN'), Chem.MolFromSmiles('CCC'), Chem.MolFromSmiles('CCCO')]
fp1 = AllChem.GetMorganFingerprintAsBitVect(mol1, 2)
fp_list = [AllChem.GetMorganFingerprintAsBitVect(mol, 2) for mol in mol_list]similarities = DataStructs.BulkTanimotoSimilarity(fp1, fp_list)
print("Bulk Tanimoto Similarities:", similarities)

3. 区别总结

特性FingerprintSimilarityBulkTanimotoSimilarity
输入两个指纹一个指纹和一个指纹列表
输出单个 Tanimoto 相似度值相似度列表
适用场景两两比较批量比较
计算效率逐对计算内部优化,批量处理更快

4. 选择建议

  • 单对分子比较: 使用 DataStructs.FingerprintSimilarity
  • 批量比较: 使用 DataStructs.BulkTanimotoSimilarity 以提高效率。

5. 使用例子

import pandas as pd
import pandas as pd
from rdkit import Chem
from rdkit.Chem import MACCSkeys
from rdkit import DataStructs
import numpy as np
from rdkit.Chem import AllChem
from rdkit.Avalon import pyAvalonToolspairs_file = r'E:\ProteinDrugInter\SNAPData\data\our_data\drug_target_information.csv'
pairs_df = pd.read_csv(pairs_file)# Index(['DrugbankID', 'UniprotID', 'SMILES', 'Sequence', 'Label'], dtype='object')
# pairs_df.columns# 计算每个分子的 avalon 指纹
def calculate_maccs(smiles):mol = Chem.MolFromSmiles(smiles)return pyAvalonTools.GetAvalonFP(mol) if mol is not None else None# return AllChem.GetMorganFingerprintAsBitVect(mol, 2, 1024) if mol is not None else Nonefilter_df = pairs_df[['DrugbankID', 'SMILES']].drop_duplicates()
filter_df.reset_index(drop=True, inplace=True)# 计算并添加 avalon 指纹到 DataFrame
filter_df['Avalon'] = filter_df['SMILES'].apply(calculate_maccs)res = []
n = len(filter_df)
for i in range(n):for j in range(i + 1, n):if i != j:drug_i = filter_df['DrugbankID'][i]drug_j = filter_df['DrugbankID'][j]# print(drug_i, drug_j)if filter_df['Avalon'][i] is not None and filter_df['Avalon'][j] is not None:sim = DataStructs.FingerprintSimilarity(filter_df['Avalon'][i], filter_df['Avalon'][j])# print(sim)res.append([drug_i, drug_j, sim])result_df = pd.DataFrame(res, columns=['Drug1', 'Drug2', 'Similarity'])
output_file = r'E:\ProteinDrugInter\datasets\SNAP\drug_similarity_avalon.csv'
result_df.to_csv(output_file, index=False)print(f"相似性结果已保存到 {output_file}")

6. 绘制密度图

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as pltsimi_file = r'E:\ProteinDrugInter\datasets\SNAP\drug_similarity_avalon.csv'
simi_df = pd.read_csv(simi_file)
iden = simi_df['Similarity']# 绘制密度图
plt.figure(figsize=(7, 4))sns.kdeplot(iden, fill=True, color='#2894FF', linewidth=1,
linestyle='--', label = 'Sequence')
plt.axvline(x=0.5, color='r', linestyle='--', linewidth=1, label='x=0.5')
plt.title('Avalon Fingerprint', fontsize=15, weight='bold')
plt.xlabel('Similarity', fontsize=12, weight='bold')
plt.ylabel('Density', fontsize=12, weight='bold')
# plt.grid(True, which="major", linestyle="-", color="#D0CECE", linewidth=0.75)
# plt.grid(True, which="minor", linestyle="-", color="#D0CECE", linewidth=0.75)
plt.legend()plt.tight_layout() 
plt.savefig(r'E:\ProteinDrugInter\datasets\SNAP\Figures\drug_similarity_avalon.png', dpi=600, transparent=True)
plt.savefig(r'E:\ProteinDrugInter\datasets\SNAP\Figures\drug_similarity_avalon.pdf')
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472066.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aws ses 设置发件人昵称

看到别人的发的都是有昵称的&#xff0c;自己发的就是直接展示noreply 其实很简单&#xff1a; 只需要把发件人改成“nickname<noreplyxxx.com>”就行了

51c大模型~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244 #猎户座 「草莓」即将上线&#xff0c;OpenAI新旗舰大模型曝光&#xff0c;代号「猎户座」 ChatGPT 要进化了&#xff1f; 本月初&#xff0c;OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片&#xff0…

【算法】二分查找

基本内容 提高在有序的数组中查找满足某一条件的索引 二分查找的基本类型 ① 有多种情况满足条件&#xff0c;找到满足条件的最右索引&#xff0c;例如找到值为4的最右索引&#xff08;也可以换为小于5的最后一个元素&#xff09; ​ ② 有多种情况满足条件&#xff0c;找到满…

PCA 原理推导

针对高维数据的降维问题&#xff0c;PCA 的基本思路如下&#xff1a;首先将需要降维的数据的各个变量标准化&#xff08;规范化&#xff09;为均值为 0&#xff0c;方差为 1 的数据集&#xff0c;然后对标准化后的数据进行正交变换&#xff0c;将原来的数据转换为若干个线性无关…

Selective attention improves transformer详细解读

Selective attention improves transformer Google 2024.10.3 一句话&#xff1a;简单且无需额外参数的选择性注意力机制&#xff0c;通过选择性忽略不相关信息并进行上下文剪枝&#xff0c;在不增加计算复杂度的情况下显著提升了Transformer模型的语言建模性能和推理效率。 论…

卡尔曼滤波:从理论到应用的简介

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种递归算法&#xff0c;用于对一系列噪声观测数据进行动态系统状态估计。它广泛应用于导航、控制系统、信号处理、金融预测等多个领域。本文将介绍卡尔曼滤波的基本原理、核心公式和应用案例。 1. 什么是卡尔曼滤波&#x…

tdengine学习笔记

官方文档&#xff1a;用 Docker 快速体验 TDengine | TDengine 文档 | 涛思数据 整体架构 TDENGINE是分布式&#xff0c;高可靠&#xff0c;支持水平扩展的架构设计 TDengine分布式架构的逻辑结构图如下 一个完整的 TDengine 系统是运行在一到多个物理节点上的&#xff0c;包含…

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

前言 本篇文章介绍的是ROS高效进阶内容&#xff0c;使用URDF 语言&#xff08;xml格式&#xff09;做一个差速轮式机器人模型&#xff0c;并使用URDF的增强版xacro&#xff0c;对机器人模型文件进行二次优化。 差速轮式机器人&#xff1a;两轮差速底盘由两个动力轮位于底盘左…

VPI photonics的一些使用经验(测相位 快速搜索)持续更新

1.使用FuncSinEl模块的注意事项&#xff1a; 2.在VPI player&#xff08;示波器&#xff09;测电信号相位时候&#xff0c;可以使用正则表达式&#xff0c;快速搜索。 比如我要搜索以30开头的数据&#xff0c;输入&#xff1a; ^30 其他的正则表达式不适用&#xff0c;比如以…

前端知识点---this的用法 , this动态绑定(Javascript)

文章目录 this动态绑定 , this的用法01. 全局作用域下的 this02. 函数中的 this2.1 普通函数调用2.2 构造函数调用2.3 箭头函数中的 this 03对象方法调用04. 事件处理中的 this05. 动态绑定的方式5.1 call 方法5.2 apply 方法5.3 bind 方法 06类中的 this07. 总结 this动态绑定…

【MySQL 保姆级教学】详细讲解视图--(15)

视图 1. 为什么要有视图&#xff1f;2.视图的定义和特点3. 创建视图4. 视图的使用举例4.1 创建表并插入数据4.2 举例 5. 视图和基表之间有什么联系呢&#xff1f; 1. 为什么要有视图&#xff1f; 当我们频繁地使用用多表查询和复合查询出的结果时&#xff0c;就需要频繁的使用…

聊聊Flink:Flink的分区机制

一、前言 flink任务在执行过程中&#xff0c;一个流&#xff08;stream&#xff09;包含一个或多个分区&#xff08;Stream partition&#xff09;。TaskManager中的一个slot的subtask就是一个stream partition&#xff08;流分区&#xff09;&#xff0c;一个Job的流&#xf…

探索SAP财务管理软件:重塑企业财务管理新境界

在当今瞬息万变的商业环境中&#xff0c;企业对于财务管理的精准性、高效性和透明度要求日益增高。作为全球领先的企业管理软件解决方案提供商&#xff0c;SAP凭借其强大的财务管理软件&#xff0c;正引领着全球企业迈向财务管理的新纪元。 SAP 财务管理系统通过智能化技术&am…

数字孪生乡村:数字乡村智慧化营建思路

数字化技术已然成为全球理论和产业界关注的热点命题 &#xff0c;并广泛应用于城市规划、交通管理、工业、医疗、教育等领域&#xff0c;已经成为文化遗产保护领域最主要方式 &#xff0c;如数字非遗、数字文物、数字文旅等。 传统村落的数字化保护呈现由单一技术向多技术集成…

《FreeRTOS任务基础知识以及任务创建相关函数》

目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务&#xff08;Task&#xff09;介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…

SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)

Spring Cloud 基础入门级学习 超详细&#xff08;简单通俗易懂&#xff09; 一、SpringCloud核心组件第一代&#xff1a;SpringCloud Netflix组件第二代&#xff1a;SpringCloud Alibaba组件SpringCloud原生组件 二、SpringCloud体系架构图三、理解分布式与集群分布式集群 四、…

Photoshop(PS)——人像磨皮

1.新建一个文件&#xff0c;背景为白色&#xff0c;将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来&#xff0c;选择第一个拷贝图层&#xff0c;选择滤镜---杂色---蒙尘与划痕 3.调整一下数值&#xff0c;大概能够模糊痘印痘坑&#xff0c;点击确定。 4.然后选择拷贝2图层…

core 文件

sysctl -a | grep core_pattern 查看core 的路径 linux下寻找段错误的方法 - 空水 - 博客园 /var/log/messages dmesg -T 一、dmesg命令 dmesg命令&#xff0c;用于获取程序出错时的堆栈地址&#xff0c;用grep过滤出发生崩溃的程序&#xff0c;以及对应的堆栈信息 [Thu Nov …

centos rich 美观打印日志

文章目录 步骤 1: 安装 Python 和 pip步骤 2: 安装 rich-cli步骤 3: 验证安装步骤 4: 使用 rich-cli参考 在 CentOS 上安装 rich-cli 工具&#xff0c;你可以按照以下步骤进行操作。rich-cli 是一个命令行工具&#xff0c;用于将 rich 库的功能&#xff08;例如美化输出&#x…

《动手学深度学习》中d2l库的安装以及问题解决

当我们在按照《动手学深度学习》这本书或者网课学习时会有需要导入d2l库的使用。​d2I是一个与《动手学深度学习》(Dive into Deep Learning&#xff09;一书配套的开源教学库&#xff0c;它包含了作者李沐设计的深度学习相关代码和示例。这个库旨在帮助读者通过实践经验来理解…