Je suis vraiment confus par celui-ci. Peut-être que quelqu'un peut clarifier le résultat pour moi:
-3.3197780173988067
produit
array ([0.39126903, 0.47080342, 0.56661974, 0.73100461, 0.97680242, 1.42368231, 2.369756, 5.34193942, 50.47146058, nan, nan])
-0.41847852**e
me donne
[0.39126902696026267, 0.4708034172873469, 0.5666197367017416, 0.7310046117775049, 0.9768024208132248,
1.4236823077174863, 2.369756002432608, 5.341939422216064,
50.47146057971127, nan, nan]
MAIS
[item**e for item in a]
donne
import numpy as np
a = np.array([ 1.97635114, 1.72790352, 1.51046621, 1.25543557, 1.01718594,
0.77378732, 0.53452001, 0.29627038, 0.05802074, -0.18022889,
-0.41847852])
e = -1.377404416
a**e
Pourquoi est-ce que numpy n'est pas capable de calculer l'exponentielle de ces deux nombres?
3 Réponses :
Les racines des nombres négatifs ne sont pas définies en nombres réels. Ce que donne python est le suivant: - (0.41847852 ** e) en raison de la priorité des opérateurs. Essayez avec les parenthèses (-0.41847852) ** e :
>>> (-1.247220271970189 + 3.0765837674262926j)
Cela donne un nombre complexe. C'est pourquoi numpy les calcule comme nan . Si vous créez un tableau numpy avec dtype = 'complex' , numpy peut également les calculer.
Mince. Merci. Même Wolfram Alpha m'a trompé. Le cours de calcul de base était déjà très ancien
À l'intérieur de numpy, avec votre tableau donné, seuls les calculs avec des valeurs réelles sont effectués. En dehors de numpy, Python effectue les calculs avec des valeurs complexes.
Notez que -0.41847852 ** e est différent de (-0.41847852)**e
Pure Python vous trompe un peu ici. Ce n'est pas un nombre réel car les racines négatives sont a . Voir ci-dessous pour une solution de contournement si vous en souhaitez une. Il utilise le dtype = np.complex pour le transformer en un nombre complexe, le utilise le .real pour le changer en ce que python pur produit.
import numpy as np
a = np.array([ 1.97635114, 1.72790352, 1.51046621, 1.25543557, 1.01718594,
0.77378732, 0.53452001, 0.29627038, 0.05802074, -0.18022889,
-0.41847852], dtype=np.complex)
e = -1.377404416
complexAnswer = a**e
realAnswer = complexAnswer.real
Cela pourrait être lié au débordement comme répondu dans cette question: stats.stackexchange.com/questions/367564/...