y
ist ein mpc
Objekt und y.real
ist ein mpf
Objekt. numpy weiß nichts über solche Objekte. Wenn Sie also np.arcsin(y)
aufrufen, prüft der numpy-Code, ob das Argument eine arcsin()
-Methode hat (dh, es sucht nach y.arcsin()
). Wenn dies der Fall ist, wird diese Funktion aufgerufen, um den arcsin zu berechnen. Die Objekte mpc
und mpf
haben keine solche Methode, die zu dem angezeigten Fehler führt. (Es wäre schön, wenn die Fehlermeldung, sagt etwas wie „numpy nicht weiß, wie die arcsin eines mpf Objekt zu berechnen“.)
Hier ist das gleiche Verhalten mit einem anderen Objekt demonstriert:
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'
wie durch Hannebambel in einem Kommentar darauf hingewiesen, könnten Sie mpmath.asin
statt np.arcsin
verwenden:
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')
die numpy arcsin
Funktion nutzen zu können, zuerst, indem t zu einem einfachen Gleitkomma oder komplex umwandeln er mpc
und mpf
Gegenstände durch die eingebauten Funktionen complex()
und float()
jeweils:
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)
Oder verwenden math.asin
statt numpy.arcsin
:
In [25]: import math
In [26]: math.asin(y.real)
Out[26]: 0.5200127360815863
Ich brauche andere Pakete für Rest meines Programms. Also importiere ich sie. – user43280