摘要:
本文主要介绍四元数Quaternion的一些基本运算法则。四元数的概念,更像是复数的一个推广,在图形学和工程学中有大量的应用,在蛋白质结构预测软件AlphaFold和MEGA-Protein中都大量的使用了四元数的计算。而大部分的四元数的教材中写的计算法则,经常把各类乘法混在一起使用,阅读起来非常难受,因此只好自己总结一下四元数的相关运算。并且跟我们所熟悉的复数运算有一定的对比,更加容易去理解四元数的概念。 阅读全文
本文主要介绍四元数Quaternion的一些基本运算法则。四元数的概念,更像是复数的一个推广,在图形学和工程学中有大量的应用,在蛋白质结构预测软件AlphaFold和MEGA-Protein中都大量的使用了四元数的计算。而大部分的四元数的教材中写的计算法则,经常把各类乘法混在一起使用,阅读起来非常难受,因此只好自己总结一下四元数的相关运算。并且跟我们所熟悉的复数运算有一定的对比,更加容易去理解四元数的概念。 阅读全文
posted @ 2022-09-20 11:17
DECHIN
阅读(12655)
评论(6)
推荐(9)

本文通过两个案例——旋转矩阵和分子动力学模拟中的SETTLE约束算法,介绍了一下Gimbal Lock问题,简单来说就是,用旋转矩阵去表示三维空间的向量旋转有可能会遇到奇点,使得三维空间原本的三个自由度在某一个点变成两个自由度。而使用我们这里所介绍的四元数Quaternion则不会有这样的问题,同时本文也介绍了一些四元数的基本运算法则和sympy中的代码实现。后续会再单独写三篇博客介绍一下四元数的具体运算细则、四元数在SETTLE算法中的应用以及四元数的物理含义等,敬请期待。
本文主要基于Python的Numpy库,介绍一些爱因斯坦求和算子Einsum的应用场景,包括求和、求内外积、求转置等等。我们需要明确的是,爱因斯坦求和算子的意义主要在于矩阵的多重运算时,可以通过爱因斯坦求和约定将这种复杂问题定义成一个张量网络,通过图模型去找到一个更好的缩并路径,以得到更好的算法复杂度。而如果只是普通的点乘求和之类的运算,其实并不是Einsum的主要功能。但是这些功能也可以用爱因斯坦求和的形式来实现,也说明了这个约定的先进性。当然,也有众多的矩阵运算功能是无法直接通过爱因斯坦求和算子来实现的,比如矩阵求逆、求本征值、矩阵扩维、矩阵重构还有向量叉乘等等。只有在合适的地方使用Einsum,才能体现它的真正价值。
在已知两个三角形顶点坐标的情况下,我们要以其中的一个三角形平面去构造一个新的坐标系,并且需要找到新旧坐标系之间的变换关系。这是一个比较简单的立体几何的问题,寻找两个坐标系之间的变换矩阵。如果是常规思路,可以先根据两个三角形之间的相对位置去计算一下在新坐标系下两个三角形的新的顶点坐标,从而可以取三个点来构造一个坐标变换矩阵,进而推广到所有向量在这两个坐标系之间的变换关系。而本文提供了一种相对更容易求解、也比较直接的思路,并给出了相关的Python代码实现过程。
本文介绍了两个不同的深度学习框架:Jax和MindSpore下的旋转矩阵的实现,对于不同的框架来说同一个功能会涉及到不同的实现方式。在Jax中,由于其函数式编程的特性,就允许我们更加简单的去构造和扩展一个旋转矩阵。MindSpore是一个面向对象编程的框架,其优势在于构建大型的模型应用。但构造一个可用的简单模型,相对而言就会走一些弯路。就比如我们需要使用Concat+Reshape的算子来拼接一个旋转矩阵,看起来会相对麻烦一些。而构建好旋转矩阵之后,则可以使用跟Jax一样的Vmap操作,或者是直接使用爱因斯坦求和来计算旋转矩阵对多个矢量输入的计算,从文章中的案例中可以看到两者所得到的计算结果是一致的。
相比于明文存储和传统的一些数据存储方法,HDF5格式的文件非常适合用于存储分子动力学模拟过程中产生的庞大轨迹文件,不仅有良好的可读性,还有非常优秀的压缩率,使得存储下来的轨迹文件不至于太大。而相应的,我们也需要一些配套的可视化软件,用来展示HDF5文件中存储的内容。本文所介绍的改进版的VMD-h5mdplugin插件,可以在VMD中直接展示HDF5的分子运动轨迹,并给出了相应的案例。
本文主要通过一个实际的案例,介绍了如何可以在命令行中调用和运行我们的python模块。“python -m”这个方案为我们提供了一个新的选项,这个运行方法以“__main__.py”文件为入口文件运行,结合python中常用的命令行工具argparse,我们就可以很容易的创建一个可以通过命令行运行和获取参数的python模块。并且可以使用twine上传到pypi网站上,用pip进行安装和管理,会更加的便捷。
本文主要介绍了开源加氢软件Hadder中用到的一些常规的补氢算法。在存储和优化蛋白质结构的过程中,人们更多的关注于蛋白质本身的骨架的变化,而单个原子的细微变化,对整体产生的性质是微乎其微的。但是我们在建立力场以及做能量最小化的过程中,需要用到氢原子。而氢原子的初始位置是至关重要的,如果加的位置太差,有可能导致体系能量过大,从而出现梯度爆炸的问题。
PDB格式的文件是最常用于存储蛋白质构象的一种,其中也是以各个氨基酸(残基)为基本单位,在氨基酸内部对原子进行唯一性的命名。本文先通过展示各种氨基酸在蛋白质链的不同位置的结构,介绍各类氨基酸的基础构象。再通过丙氨酸和色氨酸两个案例,详细介绍了在蛋白质链的中的各种氨基酸内部的原子命名法则。需要注意的是,atom_name和atom_type是不一样的,atom_name是一个唯一的标识符,atom_type则是用于导出力场参数的重要标记。
使用.gitignore来屏蔽一些文件名的关键字是一个比较常规的操作,其目的是可以过滤掉一些只需要在本地保留而不是上传到远程仓库上面的这样一些文件。但是如果存在一些冲突,比如我们需要传到远程仓库上的文件的文件名,刚好在屏蔽的关键字清单内,此时就需要使用到本文介绍的一些操作方法,来强制上传文件。
StackOverflow和StackExchange等等都是程序员常用的问题反馈和解决平台,相当于是专业性更强的知乎。但是很多类似的网站界面打开后总是有一个privacy收集的窗口无法关闭,在很大情况下影响了我们平时的阅读。因此我们通过前端的屏蔽方法,可以取消privacy位置收集窗口的固定,从而达到隐藏privacy收集窗口的目的。
当我们使用Gitee和Github等通过Git来进行代码版本管理的平台时,有时会面临这样的一个问题:某一个代码仓里面划分了很多个分支,而我只需要其中的某一个特性分支,此时如果直接克隆下来,就会导致一系列的麻烦操作。而我们只需要在clone的指令加上一条配置,就可以直接指定分支进行拉取,方便后续的操作。
本文只是通过一个实例来讲述如何获得python中所有的单字符的字母表,不仅仅是局限于英文的abcd,可能还有其他语言如ᵝᵞᵟᵠ等。在实际写python的过程中可能不一定用得到,但是不失为一个挺有趣的功能探索。
本文通过对Xponge+VMD的工具对蛋白质进行建模,然后总结了20种氨基酸的具体信息,也就是蛋白质的基本组成单元。通过对这些氨基酸的组合,就可以得到一个具有生物活性的蛋白质。同时本文还介绍了常用的存储蛋白质结构的文件格式pdb的具体格式化定义,总体来说是一个总结性的文章。
编译安装源代码为可执行文件时,有时候会遇到想把可执行文件放在特定的路径下的问题,比如放到`/usr/bin`目录下,这样可以全局可调用,又不需要手动添加各种乱七八糟的系统路径。这就需要使用到Linux中的软链接的功能,通常使用`ln -s`的指令即可。本文顺带介绍了蛋白质结构评分软件TMalign的源码下载和安装使用的基本方法,编译成一个可执行文件后,可以建立一个软链接,在系统各处都可以使用,是一个比较基础的操作。
浙公网安备 33010602011771号