上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 20 下一页
摘要: Python中将字典转为成员变量 本文所解决的问题场景是这样的:如果给定一个字典,比如一般从json文件或者npz文件中加载出来的数据都是字典的数据结构,如果我们希望把这个字典赋值给一个类,且使得字典的key和value分别作为类的成员变量名和成员变量值,那么该如何实现呢?对于一个展平的字典而言(没有嵌套字典),我们直接使用update就可以将字典中的所有key和value转变为当前类的成员变量。比较麻烦的是包含有嵌套字典的层级结构字典,此时我们只能使用循环,并且递归的对类的成员变量进行赋值。 阅读全文
posted @ 2022-03-28 21:54 DECHIN 阅读(2342) 评论(1) 推荐(1)
摘要: MindSpore尝鲜之Vmap功能 本文介绍了华为推出的深度学习框架MindSpore中最新支持的vmap功能函数,可以用于向量化的计算,本质上的主要作用是替代并加速python中的for循环的操作。最早是在numba和pytroch、jax中对vmap功能进行了支持,其实numpy中的底层计算也用到了向量化的运算,因此速度才如此之快。vmap在python中更多的是与即时编译功能jit一同使用,能够起到简化编程的同时对性能进行极大程度的优化,尤其是python中的for循环的优化。但是对于一些numpy、jax或者MindSpore中已有的算子而言,还是建议直接使用其已经实现的算子,而不是vmap再手写一个。 阅读全文
posted @ 2022-03-28 11:08 DECHIN 阅读(641) 评论(0) 推荐(0)
摘要: python中的super是什么? 本文通过一个python的实际案例的设计,来讲解python面向对象的技术——类的继承中必用的super函数的逻辑。其实我们可以把python中类的继承理解成这样的一个过程:当我们在括号中明确了父类时,其实已经引用了父类的成员函数,但是并没有执行父类的初始化函数。在执行子类的初始化函数的同时,会检查是否重载了父类的成员函数,如果重载则会直接覆盖。而只有在执行了super之后,才相当于执行了父类的初始化函数,此时才可以访问父类的成员变量。 阅读全文
posted @ 2022-03-22 16:56 DECHIN 阅读(1198) 评论(0) 推荐(0)
摘要: 从经典动力学理解勒让德变换 为了通过一些实际问题来理解勒让德变换,我们假定了这样的一个场景:一个叫勒让德的人在足球场边上被不知来源的球砸中了脑袋,只能够判断足球砸到脑袋的一瞬间的速度方向。而通过勒让德变换的函数值,结合足球旋转的角速度,我们就可以得出足球的真实来源。同时,通过勒让德变换,我们还可以从拉格朗日力学推导到哈密顿力学。而且勒让德变换在热力学系统也有非常重要的应用场景。 阅读全文
posted @ 2022-03-21 19:51 DECHIN 阅读(2239) 评论(1) 推荐(1)
摘要: 分子动力学模拟算法框架 分子动力学模拟是一个跨越众多学科领域的强大工具,从物理学的角度来看分子动力学模拟的话,其基于量子力学(量子化学)构建模型,通过牛顿力学进行演化迭代,最后能够在时间平均上等同于统计力学的系综平均,是一个堪比复变函数欧拉公式的优美过程。本文就当前分子动力学模拟的框架进行了整体介绍,其中并不展开讲解各项技术内容,但是也为感兴趣的研究人员提供一个简单的入口。 阅读全文
posted @ 2022-03-17 16:26 DECHIN 阅读(1852) 评论(0) 推荐(1)
摘要: 从刘维尔方程到Velocity-Verlet算法 本文延续历史上分子动力学模拟演化算法的发展顺序,分别讲述了Verlet、LeapFrog和Velocity-Verlet三个算法的形式,并且结合刘维尔方程,推导了Velocity-Verlet算法中的三个演化步骤的内在含义。三种不同的演化算法,都有不同的初始依赖,而对于计算过程而言,越多的初始依赖,就会涉及到越多的参数存储问题。一个好的演化算法,只需要依赖于少量的参数,而具备较高的精度。 阅读全文
posted @ 2022-03-15 12:37 DECHIN 阅读(4200) 评论(0) 推荐(0)
摘要: SETTLE约束算法的批量化处理 在前一篇文章中介绍了SETTLE约束算法在分子动力学模拟中的应用,本文通过用Jax的Vmap功能对SETTLE函数进行了扩维,使得其可以批量的计算多分子体系的约束条件。这里采用的案例是一个含有16个水分子(48原子)的小体系,从结果中可以看到,在随机移动和批量SETTLE的作用下,所有的水分子都保留了原始的键长和键角,简单理解这个过程就是一个刚体三角形的平移和旋转的过程。 阅读全文
posted @ 2022-03-11 17:48 DECHIN 阅读(428) 评论(0) 推荐(0)
摘要: Scipy和Numpy的插值对比 线性插值和三次样条插值都是非常常用的插值算法,使用插值法,可以帮助我们对离散的样本信息进行扩展,得到样本信息中所不包含的样本点的信息。插值法有着非常广泛的应用场景,就比如某手机厂商所号称的x千万像素拍照,其中插值法就发挥了重要作用。在python的scipy这个库中实现了线性插值算法和三次样条插值算法,而numpy库中实现了线性插值的算法,我们通过这两者的不同使用方式,来看下所得到的插值的结果。 阅读全文
posted @ 2022-03-09 09:22 DECHIN 阅读(3607) 评论(0) 推荐(2)
摘要: 分子动力学模拟之SETTLE约束算法 继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文再介绍一种SETTLE约束算法,及其基于Jax的实现方案。LINCS约束算法相对来说比较通用,更适合于成键关系比较复杂的通用的体系,而SETTLE算法更加适用于三原子轴对称体系,比如水分子。SETTLE算法结合velocity-verlet算法,可以确保一个分子只进行整体的旋转运动,互相之间的距离又保持不变。比较关键的是,SETTLE算法所依赖的参数较少,也不需要微分,因此在性能上十分有优势。 阅读全文
posted @ 2022-03-08 09:05 DECHIN 阅读(1281) 评论(0) 推荐(0)
摘要: Numpy是在Python中用于各种矩阵运算非常强大的工具之一,而快速的通过下标取出所需位置的元素也是numpy所支持的强大功能之一。常规的元素取法都可以通过numpy的下标或者是numpy.take函数来实现,比如array[0,:]可用于取第一条轴的所有元素,array[:,0]可以用于取第二条轴的所有第二个元素,放在一个2维的矩阵里面就分别是取第一行的所有元素和取第一列的所有元素。但是本文更加关注于更高维的矩阵,当我们想从多个维度中取多个元素时,是不太容易直接用下标去取的,比如同时取a[0][0],a[0][1],a[1][1],a[1][2]的话,那么就只能使用numpy所支持的另外一个函数numpy.take_along_axis来实现。 阅读全文
posted @ 2022-02-24 17:32 DECHIN 阅读(1528) 评论(0) 推荐(1)
摘要: 这篇文章的主要内容是梳理在Numpy中经常用到的各种取下标的操作,包括但不限于取指定轴的所有元素、取指定位置的单个元素、取指定位置的多个元素、扩维以及取未显式给定位置的多个元素等等。比较重要的是在Numpy中tuple的取法和list的取法是代表不一样的含义,并且由于历史原因,Numpy中存在一些list取法和numpy.array的取法表示不一致的地方,在本文中进行了总结。 阅读全文
posted @ 2022-02-23 20:18 DECHIN 阅读(1945) 评论(0) 推荐(0)
摘要: 在本文中通过一个实际函数案例的多次尝试,给出了得到预期结果的一种解决方案。虽然MindSpore框架本身提供了Jvp和Vjp等功能,但是实际上和Grad没有太大的区别,只是用Tuple的形式增加了输入的一个维度。如果可以使用纯Tensor的输入,用这种Mask加上Grad或者GradOperation的方案会更加简单一些。同时我也尝试过使用HyperMap(类似于Jax中的vmap)来解决这个问题,只需要写好一条对z求导的函数形式,就可以自动对这个求导过程进行扩维,两者的结果是一致的。但是MindSpore的HyperMap在Graph模式下兼容效果不是很好,建议非必要不尝试。 阅读全文
posted @ 2022-02-17 16:55 DECHIN 阅读(343) 评论(0) 推荐(0)
摘要: 在前一篇博客中我们介绍了加侧旋的乒乓球弧圈技术的模拟,本文我们关注的是高吊弧圈和削球弧线这两种轨迹原理,并且引入了空气阻力对乒乓球运动轨迹的影响。通过对空气阻力和马格努斯力的模拟,我们可以看到不同的弧线曲线。对于乒乓球爱好者而言,可以通过这种模拟的结果,来制定比赛中有可能用到的策略,比如低长弧圈球、高短弧圈球等等。先从科学的角度出发制定战略,再通过日常训练和巩固提高技术水平,最后再使用到正式的赛场上去。 阅读全文
posted @ 2022-02-15 19:07 DECHIN 阅读(1469) 评论(1) 推荐(2)
摘要: 本文通过对马格努斯力的模拟,来理解乒乓球的弧圈原理。并且在这个理论基础之上对比了几种场景下的乒乓球轨迹,比如乒乓球的运动速度,或者日常所说的撞击对乒乓球轨迹的影响。还有乒乓球的角速度,也就是日常我们所说的摩擦对乒乓球轨迹的影响。还有一个在乒乓球界堪称变革的小球改大球对乒乓球这项运动可能带来的影响。由于这方面读过的理论文章较少,本文仅仅作为一个娱乐参考即可。 阅读全文
posted @ 2022-02-12 12:17 DECHIN 阅读(1856) 评论(2) 推荐(2)
摘要: 本文通过完整的案例及其算法实现的过程,介绍了LINCS(Linear Constraint Solver)这一分子动力学模拟过程常用的约束算法。得益于Jax这一框架的便用性及其对numpy的强大支持、对GPU计算的优化、还有自动微分与向量化运算等技术的实现,使得我们实现LINCS这一算法变的不再困难。 阅读全文
posted @ 2022-02-09 21:41 DECHIN 阅读(1438) 评论(1) 推荐(1)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 20 下一页