Python:AttributeError:' mpc' (或' mpf')对象没有属性' arcsin'

时间:2017-06-19 12:23:49

标签: python numpy sympy mpmath mpc

我试图使用public enum MyEnum { VALUE1, VALUE2, VALUE3; public int getValue() { return this.ordinal(); } public static DataType forValue(int value) { return values()[value]; } public String toString() { return forValue(getValue()).name(); } } 中的Jacobi椭圆函数,但得到下面给出的简单代码的错误:

mpmath

即使我只传递函数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) 的实部,我也会收到错误。 我不知道自己是否犯了错误。请帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:4)

ympc个对象,y.realmpf个对象。 numpy对这些对象一无所知,所以当你调用np.arcsin(y)时,numpy代码会检查参数是否有arcsin()方法(即它查找y.arcsin())。如果是,它将调用该函数来计算arcsin。 mpcmpf对象没有这样的方法,这会导致您看到的错误。 (如果错误信息表示类似" numpy不知道如何计算mpf对象的反射信号,那就太好了。)

以下是使用其他对象演示的相同行为:

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和{{mpfcomplex()对象传递,转换为普通浮点或复数。 1}},分别为:

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