Python+NumPy的自动区分库。

auto-diff的Python项目详细描述


自动差异

Python+NumPy的自动区分库

如何使用

API有五个公共元素:

  • AutoDiff是上下文管理器,必须使用with语句输入。 __enter__方法返回必须用于的x的新版本,而不是作为参数传递给AutoDiff构造函数的x。在

  • valuejacobianget_value_and_jacobian,这些函数必须是 在AutoDiff上下文中调用,从 因变量。在

  • {{wrt}作为不同的变量返回到cd1}方法中。在

如果使用get_value_and_jacobian,x必须是二维列向量,并且 必须为派生分析的值也必须是二维列 矢量。在大多数情况下,如何转换成雅可比矩阵 不明显。如果你想处理这些案件,请参阅 例子。在

auto_diff还支持使用稀疏矩阵代替ndarray来存储雅可比矩阵。 简单地使用SparseAutoDiff上下文管理器,而不是AutoDiff。 另外,如果使用SparseAutoDiff,则需要验证代码和非NumPy依赖项是否对浮点向量使用np.ndarray构造函数。 如果使用SparseAutoDiffget_value_and_jacobianjacobian、和{}返回{}es而不是{}s

示例

importauto_diffimportnumpyasnp# Define a function f# f can have other arguments, if they are constant wrt x# Define the input vector, xwithauto_diff.AutoDiff(x)asx:f_eval=f(x,u)y,Jf=auto_diff.get_value_and_jacobian(f_eval)# y is the value of f(x, u) and Jf is the Jacobian of f with respect to x.

如果你需要x和u的Jacobian wrt

^{pr2}$

最后,如果f和{}是非常高维的,那么我们可以使用SparseAutoDiff来节省内存。在

withauto_diff.SparseAutoDiff(x,u)as(x,u):f_eval=f(x,u)y,(Jfx,Jfu)=auto_diff.get_value_and_jacobians(f_eval)# y is the value of f(x, u), Jfx is the Jacobian of f with respect to x, and# Jfu is the Jacobian of f with respect to u.# Jfx and Jfu are instances of scipy.sparse.lil_matrix.

我们还可以将函数与任意形状的numpy数组区分开来 任意形状的输出。让y = f(x),其中x是一个numpy形状数组 x.shape,而{}是我们想要区分的函数的输出,f。在

然后,我们可以通过访问 y.der。这表示y的每个分量相对于 ^{

importauto_diffimportnumpyasnpx=np.array([[np.pi],[3.0],[17.0]])withauto_diff.AutoDiff(x)asx:print(np.linalg.norm(x).der)

限制

  • 您必须导入numpy并使用该对象,而不是执行以下操作 from numpy import ...,其中...要么是{},要么就是函数名。在

崩溃、错误报告和反馈: 电子邮件parthnobel@berkeley.edu

现在缺少一些功能。我正在处理,请随时给我发邮件 如果你想优先考虑某件事。在

先决条件

可能需要NumPy>;=1.17的版本。老版本上的错误总是 提出了错误,所以不必担心。在

作者:Parth Nobel(Github:/PTNobel,parthnobel@berkeley.edu) 版本:0.3

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为textview创建选定状态(突出显示)   Java Hibernate计数行   Java语言中的字符串比较   java为什么SparkLauncher会立即返回而不会生成任何作业?   java layout_centerInParent在抛出回收视图后不工作   c#中的readInt16()与java中的readShort()   java如何在工具栏菜单中添加昼夜切换器   java在eclipse上向Tomcat提供<Realm/>信息   java使用给定的随机路径构造一个图   带有对象推送的java Morphia聚合阶段组   java关闭JTable实例   性能如何更好地转换java中的所有集合元素?   JAVA木卫一。IOException:通过Eclipse读取Java中的EOF Lucene   java如何在Android中将光标设置在tableLayout的行/列中所需的位置   使用HashMap的Set的java迭代器不会生成值/键吗?   java google guava cachebuilder在ExipeAfterAccess和expireActerWrite之间使用的时间更长   如何将这个排序映射方法从java转换为Kotlin   java如何从运行的JAR文件中读取war目录?   SpringBootJava。使用Java 9模块(JPM)时lang.NoSuchMethodError