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 Spring freemarker多模板加载程序路径   在java插件中从控制台获取输入   java在包中创建继承类   网页抓取Java Jsoup网页抓取   java在线程内创建一个对象,而true条件具有相同的引用   java如何根据空格数拆分字符串   java新的安卓 studio更新中的配置文件“app”是什么?   java在将ArrayList写入/读取到文件时出现奇怪的问题   java Reg替换文本块第一次出现+最后一次出现   java当我单击任何RecyclerView列表项时,如何在MainActivity的EditText中显示特定的单击项?   JAVA XML删除节点仅删除第一个外观   java如何在数组中查找特定值   java SVG/矢量图形对象布尔运算(并集、交集、减法)   java在Android中创建线程需要多长时间   尝试从JBOSS联系Oracle LDAP服务器时发生java连接重置异常   java基于参数获取特定的实现实例   使用java就地修改文件内容   java MonetaryException:未加载MonetaryAmountsSingletonSpi   java接受用户的不同输入并使其触发完全相同的代码段的最短方法是什么   Spring 3.2.8应用程序中未找到java HTTP 404错误