[CppAD] numpy eigenvalues in pyCppAD
Brad Bell
bradbell at seanet.com
Fri Aug 4 09:12:04 EDT 2017
It appears that the operation
np.linalg.eigvalsh(m)
does not work for arrays where the corresponding scalar type is user
defined.
This seems to be a limitation of the python linalg package ?
Perhaps you can find a python package that supports this ?
Perhaps you can use C++ and eigen for your calculations; see
https://www.coin-or.org/CppAD/Doc/eigen_det.cpp.htm
https://eigen.tuxfamily.org/dox/group__Eigenvalues__Module.html
On 08/03/2017 06:04 PM, Jyotiranjan Beuria wrote:
> Even after removing "x=independent(arg)" in the function definition
> also does not solve the problem. It seems that np.linalg.eigvalsh()
> is not accepting a_float types. At this point I have a naive question,
> are all linear algebra modules offered by numpy compatible with
> CppAD?
>
> I still get following error:
>
> File "/usr/local/lib/python2.7/dist-packages/numpy/linalg/linalg.py",
> line 994, in eigvalsh
>
> w = gufunc(a, signature=signature, extobj=extobj)
>
> TypeError: No loop matching the specified signature and casting
>
> was found for ufunc eigvalsh_lo
>
>
> On Fri, Aug 4, 2017 at 4:02 AM, Brad Bell <bradbell at seanet.com
> <mailto:bradbell at seanet.com>> wrote:
>
> It seems from the statement
> a_y = Pot(a_x)
> that the return value from Pot should be an a_float.
>
> Looking at the code for Pot(arg), it is not clear what the call to
> independent is doing,
> nor how two levels are AD are used here.
>
> This makes me think that
> def Pot(arg) :
> x=independent(arg)
> should be replaced by
> def Pot(x) :
> and
> dtype='a2float'
> should be replaced by
> dtype='a_float'
>
>
>
>
> On 08/03/2017 05:07 AM, Jyotiranjan Beuria wrote:
>
> Dear Experts,
>
> I am trying to use python wrapper for CppAD. My function
> depends on the eigenvalues of a matrix. Can anyone help
> me in this regard. The code is given below.
>
> *************************************************************
> from pycppad import *
> import numpy as np
> def Pot(arg):
> x=independent(arg)
> m00=x[0]*x[0]
> m11=x[1]*x[1]
> m01=x[0]*x[1]
> m10=-x[0]*x[1]
> m=np.array([[m00,m01],[m10,m11]])
> return
> np.array([np.sum(np.linalg.eigvalsh(m))],dtype='a2float')
> def hessian():
> delta = 10. * np.finfo(float).eps
> x = np.array( [ 0., 0. ] )
> a_x = independent(x)
> a_y = Pot(a_x)
> f = adfun(a_x, a_y)
> x = np.array( [ 2., 3. ] )
> H = f.hessian(x, [0])
> print H
>
> hessian()
> *************************************************************
>
> I am getting following error.
>
> *Traceback (most recent call last):
> File "hessian2.py", line 37, in <module>
> pycppad_test_hessian()
> File "hessian2.py", line 30, in pycppad_test_hessian
> a_y = Pot(a_x)
> File "hessian2.py", line 24, in Pot
> return np.array([np.sum(np.linalg.eigvalsh(m))],dtype='a2float')
> File
> "/usr/local/lib/python2.7/dist-packages/numpy/linalg/linalg.py",
> line 994, in eigvalsh
> w = gufunc(a, signature=signature, extobj=extobj)
> TypeError: No loop matching the specified signature and casting
> was found for ufunc eigvalsh_lo*
>
> Regards,
> Jyotiranjan Beuria
> Graduate student, HRI, INDIA
>
>
>
> _______________________________________________
> CppAD mailing list
> CppAD at list.coin-or.org <mailto:CppAD at list.coin-or.org>
> https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cppad&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=UxLhbaqYMJLc2OFXF6T8asQht7vpwIClD1FdrFb8omo&m=rPTSQO84d-cZe99G2qE3-3_iukhRo0yydos83tDxCYY&s=r9S0qITbXtLfkk3Dqx1Hb9vdoXe5h3QmEjLvr_on3-c&e=
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cppad&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=UxLhbaqYMJLc2OFXF6T8asQht7vpwIClD1FdrFb8omo&m=rPTSQO84d-cZe99G2qE3-3_iukhRo0yydos83tDxCYY&s=r9S0qITbXtLfkk3Dqx1Hb9vdoXe5h3QmEjLvr_on3-c&e=>
>
> _______________________________________________
> CppAD mailing list
> CppAD at list.coin-or.org <mailto:CppAD at list.coin-or.org>
> https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cppad&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=Q-ytHio7AaRRiIuJRtbXN8AT1n8UpuHlx7zvJ-OkcrY&m=a1LG50d2vI9UL7Ttk1Y1nZpCgW-ApCfzJSZOMe2Vsr4&s=OY_pnnHykR6L0RkY2b-r897K_2vIklZz85RoBJMwd6E&e=
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cppad&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=Q-ytHio7AaRRiIuJRtbXN8AT1n8UpuHlx7zvJ-OkcrY&m=a1LG50d2vI9UL7Ttk1Y1nZpCgW-ApCfzJSZOMe2Vsr4&s=OY_pnnHykR6L0RkY2b-r897K_2vIklZz85RoBJMwd6E&e=>
>
>
>
>
>
> --
> Jyotiranjan Beuria
> Ph.D Student, HRI Allahabad
More information about the CppAD
mailing list