Jax中关于NonZero的使用】的更多相关文章

Numpy.nonzero()返回的是数组中,非零元素的位置.如果是二维数组就是描述非零元素在几行几列,三维数组则是描述非零元素在第几组中的第几行第几列. 举例如下: 二维数组: a = np.array([[, , ], [, , ], [, , ]]) b = np.nonzero(a) print(b) 结果为:(array([0, 0, 1, 2], dtype=int64), array([0, 2, 1, 2], dtype=int64)) 第一个array描述行,第二个array描…
技术背景 JAX-MD是一款基于JAX的纯Python高性能分子动力学模拟软件,应该说在纯Python的软件中很难超越其性能.当然,比一部分直接基于CUDA的分子动力学模拟软件性能还是有些差距.而在计算过程中,近邻表的计算是占了较大时间和空间比重的模块,我们通过源码分析,看看JAX-MD中使用了哪些的奇技淫巧,感兴趣的童鞋可以直接参考JAX-MD下的partition模块. Verlet List和Cell List的使用 关于Verlet List,其实更多的是使用在动力学模拟的过程中,而Ce…
    K-means是一种无监督的学习,将相似的对象归到同一个簇中.可以将一批数据分为K个不同的簇,并且每个簇的中心采用簇中所含样本的均值计算而成.     K-means算法的K值需要由用户指定,算法开始时随机选择K个初始点作为质心,然后将数据集中的每个点分配到一个簇中.那么,如何确定某一组数据归于哪个簇中呢?这是通过计算这一组数据与K个质心的距离来实现的,这组数据离哪个质心最近,就将其归于哪个簇中.待所有数据第一次循环完毕后,重新计算质心,质心更新为该簇所有点的平均值.直到每一个簇的质心都…
一.函数 1.numpy 模块中的nonzero函数 nonzero返回的数非零元素的下标. 如果输入是单维度的时候它的返回值只有一个:如果输入是多个维度的话,那么它的返回值也是多个维度的.并且的它的每个维度的值表示的是非零元素在当前维度中的下标. i.ea = [true, flase, flase] nonzero(a) 那么此时的它的返回值应该是((0)) a=matrix[[1,0,0],[0,1,0],[0,0,1]] nonzero(a) 那么此时它的返回值应该是((0,1,2),(…
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目. 在雕琢代码的过程中,有大工程:比如应该用什么架构.哪种设计模式.也有更多的小细节,比如何时使用异常(Exceptions).或怎么给变量起名.那些真正优秀的代码,正是由无数优秀的细节造就的. 『Python 工匠』这个系列文章,是我的一…
Python 里的分支代码 Python 支持最为常见的 if/else 条件分支语句,不过它缺少在其他编程语言中常见的 switch/case 语句. 除此之外,Python 还为 for/while 循环以及 try/except 语句提供了 else 分支,在一些特殊的场景下,它们可以大显身手. 下面我会从 最佳实践.常见技巧.常见陷阱 三个方面讲一下如果编写优秀的条件分支代码. 最佳实践 1. 避免多层分支嵌套 如果这篇文章只能删减成一句话就结束,那么那句话一定是“要竭尽所能的避免分支嵌…
技术背景 随机采样问题,不仅仅只是一个统计学/离散数学上的概念,其实在工业领域也都有非常重要的应用价值/潜在应用价值,具体应用场景我们这里就不做赘述.本文重点在于在不同平台上的采样速率,至于另外一个重要的参数检验速率,这里我们先不做评估.因为在Jax中直接支持vmap的操作,而numpy的原生函数大多也支持了向量化的运算,两者更像是同一种算法的不同实现.所以对于检验的场景,两者的速度区别更多的也是在硬件平台上. 随机采样示例 关于Jax的安装和基本使用方法,读者可以自行参考Jax的官方文档,需要…
技术背景 在分子动力学模拟的过程中,考虑到运动过程实际上是遵守牛顿第二定律的.而牛顿第二定律告诉我们,粒子的动力学过程仅跟受到的力场有关系,但是在模拟的过程中,有一些参量我们是不希望他们被更新或者改变的,比如稳定的OH键的键长就是一个不需要高频更新的参量.这时就需要在一次不加约束的更新迭代之后(如Velocity-Verlet算法等),再施加一次约束算法,重新调整更新的坐标,使得规定的键长不会产生较大幅度的变更. 初始化坐标参数 为了实现LINCS这一算法,我们先初始化一组随机的坐标用于测试,比…
技术背景 当前主流的深度学习框架,除了能够便捷高效的搭建机器学习的模型之外,其自动并行和自动微分等功能还为其他领域的科学计算带来了模式的变革.本文我们将探索如何用MindSpore去实现一个多维的自动微分,并且得到该多元函数的雅可比矩阵. 函数形式与雅可比矩阵形式 首先我们给定一个比较简单的z关于自变量x的函数形式(其中y和I是一些参数): \[z_{i,j}(x)=y_ix_j \] 比如我们考虑一个3*3的z,我们最终需要计算的是这样一个雅可比矩阵: \[J_z(x)= \left[ \be…
技术背景 Vmap是一种在python里面经常提到的向量化运算的功能,比如之前大家常用的就是numba和jax中的向量化运算的接口.虽然numpy中也使用到了向量化的运算,比如计算两个numpy数组的加和,就是一种向量化的运算.但是在numpy中模块封装的较好,定制化程度低,但是使用便捷,只需要调用最上层的接口即可.现在最新版本的mindspore也已经推出了vmap的功能,像mindspore.numba还有jax,与numpy的最大区别就是,需要在使用过程中对需要向量化运算的函数额外嵌套一层…