无法在 pydrake 约束中调用常见的 numpy 函数
Unable to call common numpy functions in pydrake constraints
我正在使用 pydrake 中的示例,该示例具有极坐标约束,包括评估以下函数:
def f(x):
r = np.sqrt(x[0]**2 + x[1]**2)
theta = np.arctan(x[1] / x[0])
return np.array([r, theta])
但是,它在 np.arctan
调用时因以下错误而阻塞:
TypeError: loop of ufunc does not support argument 0 of type pydrake.autodiffutils.AutoD
iffXd which has no callable arctan method
pydrake 中是否有适合 autodiff 的 atan
函数?
我在其他地方看到过这个错误,我不得不自己重新实现(例如,我尝试了 np.linalg.cholesky
并遇到了类似的错误,所以我实现了自己的 cholesky
函数,使用 more基本操作)。有没有更好的方法来解决这个问题,以便我可以通过 pydrake autodiff 更好地利用 numpy 中的东西?
更新
原来你可以使用 np.arctan2(x[1], x[0])
并且它可以与 pydrake autodiff 一起使用,所以我想这解决了我的具体问题。但我仍然很想知道如何解决这些错误,因为除了实现我自己的版本之外,它们还会出现。
虽然我不熟悉 Drake/PyDrake,但任何自动微分程序都需要以其导数已知的方式实现函数。 PyDrake 似乎正在检查您的代码,识别它知道的自动差异版本(例如,np.arctan2
)的函数,并用这些版本替换它们。看起来像 this is the list of functions PyDrake has implemented, so you may want to refer to this list rather than use trial and error. Oddly enough, arctan
is there as well as arctan2
. I think there may be an additional problem here, specifically that arctan(y/x)
is not differentiable everywhere, whereas arctan2(x, y)
is designed to fix that. See these plots of arctan(y/x) and arctan2(x, y) 作为示例。
无论如何,出于数学原因,您可能希望使用 arctan2
来找到该角度,除非您知道它被限制在某个范围内。
我正在使用 pydrake 中的示例,该示例具有极坐标约束,包括评估以下函数:
def f(x):
r = np.sqrt(x[0]**2 + x[1]**2)
theta = np.arctan(x[1] / x[0])
return np.array([r, theta])
但是,它在 np.arctan
调用时因以下错误而阻塞:
TypeError: loop of ufunc does not support argument 0 of type pydrake.autodiffutils.AutoD iffXd which has no callable arctan method
pydrake 中是否有适合 autodiff 的 atan
函数?
我在其他地方看到过这个错误,我不得不自己重新实现(例如,我尝试了 np.linalg.cholesky
并遇到了类似的错误,所以我实现了自己的 cholesky
函数,使用 more基本操作)。有没有更好的方法来解决这个问题,以便我可以通过 pydrake autodiff 更好地利用 numpy 中的东西?
更新
原来你可以使用 np.arctan2(x[1], x[0])
并且它可以与 pydrake autodiff 一起使用,所以我想这解决了我的具体问题。但我仍然很想知道如何解决这些错误,因为除了实现我自己的版本之外,它们还会出现。
虽然我不熟悉 Drake/PyDrake,但任何自动微分程序都需要以其导数已知的方式实现函数。 PyDrake 似乎正在检查您的代码,识别它知道的自动差异版本(例如,np.arctan2
)的函数,并用这些版本替换它们。看起来像 this is the list of functions PyDrake has implemented, so you may want to refer to this list rather than use trial and error. Oddly enough, arctan
is there as well as arctan2
. I think there may be an additional problem here, specifically that arctan(y/x)
is not differentiable everywhere, whereas arctan2(x, y)
is designed to fix that. See these plots of arctan(y/x) and arctan2(x, y) 作为示例。
无论如何,出于数学原因,您可能希望使用 arctan2
来找到该角度,除非您知道它被限制在某个范围内。