Python: AttributeError: 'mpc' (or 'mpf') object has no attribute 'arcsin'
Python: AttributeError: 'mpc' (or 'mpf') object has no attribute 'arcsin'
我试图使用 mpmath
中的 Jacobi 椭圆函数,但收到下面给出的简单代码的错误:
import numpy as np
import scipy.integrate as spi
from scipy import special as sp
import matplotlib.pyplot as plt
from math import sqrt, pow, log
from mpmath import ellipfun
sn = ellipfun('sn')
y=sn(0.5,-1)
print y
y1=y.real
print y1, np.arcsin(y), np.arcsin(y1)
即使我只传递了函数的实部 sn(0.5,-1)
,我仍然收到错误消息。
我不知道我是否犯了错误。请帮忙。
提前致谢。
y
是一个 mpc
对象,y.real
是一个 mpf
对象。 numpy 对此类对象一无所知,因此当您调用 np.arcsin(y)
时,numpy 代码会检查参数是否具有 arcsin()
方法(即,它会查找 y.arcsin()
)。如果是,它将调用该函数来计算 arcsin。 mpc
和 mpf
对象没有这样的方法,这会导致您看到的错误。 (如果错误信息说的是 "numpy does not know how to compute the arcsin of an mpf object" 之类的话就好了。)
下面是用不同对象演示的相同行为:
In [10]: class Foo:
...: pass
...:
In [11]: f = Foo()
In [12]: np.arcsin(f)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-aa4b1a80cd4e> in <module>()
----> 1 np.arcsin(f)
AttributeError: Foo instance has no attribute 'arcsin'
正如 Hannebambel 在评论中指出的那样,您可以使用 mpmath.asin
而不是 np.arcsin
:
In [6]: import mpmath
In [7]: y = sn(0.5, -1)
In [8]: mpmath.asin(y)
Out[8]: mpc(real='0.52001273608158616', imag='0.0')
要使用 numpy arcsin
函数,首先将 mpc
和 mpf
对象通过内置函数 complex()
和float()
,分别为:
In [19]: y
Out[19]: mpc(real='0.49689119041931196', imag='0.0')
In [20]: np.arcsin(float(y.real))
Out[20]: 0.52001273608158627
In [21]: np.arcsin(complex(y))
Out[21]: (0.52001273608158616+0j)
或使用math.asin
代替numpy.arcsin
:
In [25]: import math
In [26]: math.asin(y.real)
Out[26]: 0.5200127360815863
我试图使用 mpmath
中的 Jacobi 椭圆函数,但收到下面给出的简单代码的错误:
import numpy as np
import scipy.integrate as spi
from scipy import special as sp
import matplotlib.pyplot as plt
from math import sqrt, pow, log
from mpmath import ellipfun
sn = ellipfun('sn')
y=sn(0.5,-1)
print y
y1=y.real
print y1, np.arcsin(y), np.arcsin(y1)
即使我只传递了函数的实部 sn(0.5,-1)
,我仍然收到错误消息。
我不知道我是否犯了错误。请帮忙。
提前致谢。
y
是一个 mpc
对象,y.real
是一个 mpf
对象。 numpy 对此类对象一无所知,因此当您调用 np.arcsin(y)
时,numpy 代码会检查参数是否具有 arcsin()
方法(即,它会查找 y.arcsin()
)。如果是,它将调用该函数来计算 arcsin。 mpc
和 mpf
对象没有这样的方法,这会导致您看到的错误。 (如果错误信息说的是 "numpy does not know how to compute the arcsin of an mpf object" 之类的话就好了。)
下面是用不同对象演示的相同行为:
In [10]: class Foo:
...: pass
...:
In [11]: f = Foo()
In [12]: np.arcsin(f)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-aa4b1a80cd4e> in <module>()
----> 1 np.arcsin(f)
AttributeError: Foo instance has no attribute 'arcsin'
正如 Hannebambel 在评论中指出的那样,您可以使用 mpmath.asin
而不是 np.arcsin
:
In [6]: import mpmath
In [7]: y = sn(0.5, -1)
In [8]: mpmath.asin(y)
Out[8]: mpc(real='0.52001273608158616', imag='0.0')
要使用 numpy arcsin
函数,首先将 mpc
和 mpf
对象通过内置函数 complex()
和float()
,分别为:
In [19]: y
Out[19]: mpc(real='0.49689119041931196', imag='0.0')
In [20]: np.arcsin(float(y.real))
Out[20]: 0.52001273608158627
In [21]: np.arcsin(complex(y))
Out[21]: (0.52001273608158616+0j)
或使用math.asin
代替numpy.arcsin
:
In [25]: import math
In [26]: math.asin(y.real)
Out[26]: 0.5200127360815863