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.xdnf.cn/news/17138.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

性能优化(二):ANR

介绍 ANR全称Application Not Responding,意思就是程序未响应。如果一个应用无法响应用户的输入,系统就会弹出一个ANR对话框,用户可以自行选择继续等待亦或者是停止当前程序。 Android系统会监控程序的响应状况,一旦出现下面情况…

哑光电影人像自拍风景摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 哑光电影人像自拍风景摄影后期调色旨在通过 Lightroom 软件为照片营造出一种具有电影质感的哑光效果,同时突出人像与风景的融合之美。 预设信息 调色风格:电影风格预设适合类型:人像,风光,自拍,…

二五、pxe自动装机

pxe自动装机 pxe------------------------------自动安装系统必要的运行环境 无人值守--------------------为系统定制化的安装需要的软件 pxe的优点: 1、规模化:同时装配多台服务器(20-30) 2、自动化:系统安装和…

Cadence安装

记录一下安装过程,方便以后安装使用Cadence。 去吴川斌的博客下载安装包,吴川斌博客: https://www.mr-wu.cn/cadence-orcad-allegro-resource-downloads/ 下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装…

VScode-Java开发常用插件

中文——界面易读 字体主题——代码可观 头注释——项目信息明了 java开发包——java必备 git协作开发——版本控制

19.UE5道具掉落

2-21 道具掉落,回血、回蓝、升级提升伤害_哔哩哔哩_bilibili 目录 1.道具的创建,道具功能的实现 2.随机掉落 1.道具的创建,道具功能的实现 新建Actor蓝图,并命名为道具总类,添加一个Niagara粒子组件和一个碰撞箱bo…

算法--分解数字

#分解5位整数 12345# 定义一个函数x&#xff0c;用于将一个整数n转换为一个列表&#xff0c;列表中的元素是n的每一位数字 def x(n):# 如果n小于10&#xff0c;说明n是一个一位数&#xff0c;直接创建一个包含n的列表并返回if n < 10:list1 [] # 创建一个空列表list1.appe…

protobuf序列化

Protocol Buffers (protobuf) 是一种由 Google 开发的轻便、高效的结构化数据序列化格式&#xff0c;常用于数据存储或在应用程序之间传输数据。它可以将数据结构&#xff08;如对象、消息&#xff09;转换为字节流&#xff0c;以便在网络上进行传输或存储。 Protobuf序列化基…

M-LAG 技术笔记

M-LAG 简介 M-LAG&#xff08;Multichassis link aggregation&#xff0c;跨设备链路聚合&#xff09;将两台物理设备在聚合层面虚拟成一台设备来实现跨设备链路聚合&#xff0c;从而提供设备级冗余保护和流量负载分担。 M-LAG 基础概念 如 图1-1 所示&#xff0c;Device A …

【政策】正文关键词提取总结

附&#xff1a;样本构建流程&#xff1a; 候选样本圈选&#xff0c;这一步的目的是选出潜在的高质量样本&#xff0c;找到一部分高难度样本&#xff0c;并过滤掉可能的意图不明或无意义数据。样本圈选的方法见下文。 对圈选出的样本随机抽样一小部分进行人工标注。 利用少量的…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

特征缩放的学习

两边同时除以最大范围&#xff0c;除了除以最大值以外&#xff0c;你还可以执行所谓的均值归一化。这看起来是&#xff0c;你从原始特征开始&#xff0c;然后你重新缩放他们&#xff0c;使两者其中以零为中心。以前它们只有大于零的值&#xff0c;现在他们既有负值又有正值这通…

【大模型实战篇】vLLM的由来以及大模型部署、推理加速实践

1. 问题背景分析及vLLM的由来 大模型毫无疑问&#xff0c;在工作、生活中已经逐渐扮演越来越重要的角色。但大模型的尺寸一般都比较大&#xff0c;处理一个大模型请求的成本可能比传统关键字查询高出 10 倍。推理的成本代价较高&#xff0c;因此提高大模型服务系统的吞吐量&…

[JAVAEE] 网络编程

目录 一. 什么是socket套接字 二. socket套接字 2.1 socket套接字根据传输层协议分类 2.2 TCP流套接字 UDP数据报套接字主要特点 三. UDP数据报套接字编程 3.1 DatagramSocket 是UDP socket, 用于发送和接受数据报 3.2 DatagramPacket 是UDP socket 发送和接收的数据报 …

SDF,一个从1978年运行至今的公共Unix Shell

关于SDF 最近发现了一个很古老的公共Unix Shell服务器&#xff0c;这个项目从1978年运行至今&#xff0c;如果对操作系统&#xff0c;对Unix感兴趣&#xff0c;可以进去玩一玩体验一下 SDF Public Access UNIX System - Free Shell Account and Shell Access 注册方式 我一…

物联网低功耗广域网LoRa开发(二):LoRa开发环境搭建及驱动移植

一、STM32CubeMX加载固件库 将F0固件库添加进来 二、IAR介绍、安装及快捷操作 &#xff08;一&#xff09;IAR介绍 1、简介 C/C编译器和调试器 集成开发环境(IDE) 实时操作系统和中间件 开发套件 硬件仿真器以及状态机建模工具2、IAR与Keil对比 MDK默认只创建工程&#xf…

RK3568平台开发系列讲解(设备树篇)device_node 转换成 platform_device

🚀返回专栏总目录 文章目录 一、DTB转换规则二、转换源码分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过设备树 device_node 转换成 platform_device 一、DTB转换规则 device 部分是用 platform_device 结构体来描述硬件资源的, 所以内核最终会…

深入理解 source 和 sh、bash 的区别

1 引言 在日常使用 Linux 的过程中&#xff0c;脚本的执行是不可避免的需求之一&#xff0c;而 source、sh、bash 等命令则是执行脚本的常用方式。尽管这些命令都能运行脚本&#xff0c;但它们之间的执行方式和效果却有着显著的区别。这些区别可能会影响到脚本的环境变量、工作…

基于Java Springboot鲜花商城系统

一、作品包含 源码数据库设计文档PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL8.0 …

413: Quick Sort

解法&#xff1a; #include <bits/stdc.h> using namespace std; const int N1e55; int a[N]; int n;int main(int argc, char** argv) {cin>>n;for (int i0;i<n;i) cin>>a[i];sort(a,an);for (int i0;i<n;i) cout<<a[i]<<" "…