numpy返回指数的nans。纯Python返回正确结果

我对此感到非常困惑。也许有人可以为我澄清结果:

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

产生

array([ 0.39126903,0.47080342,0.56661974,0.73100461,0.97680242,1.42368231,2.369756,5.34193942,50.47146058,nan,nan])

[item**e for item in a]

给我

[0.39126902696026267,0.4708034172873469,0.5666197367017416,0.7310046117775049,0.9768024208132248,1.4236823077174863,2.369756002432608,5.341939422216064,50.47146057971127,nan]

但是

-0.41847852**e

收益

-3.3197780173988067

为什么numpy无法计算这两个数字的指数?

seraph59 回答:numpy返回指数的nans。纯Python返回正确结果

负数的根没有定义为实数。 python提供的内容如下:-(0.41847852**e)由于运算符的优先级。尝试使用括号(-0.41847852)**e

>>> (-1.247220271970189+3.0765837674262926j)

它给出一个复数。这就是为什么numpy将它们计算为nan的原因。如果您使用dtype='complex'创建numpy数组,numpy也可以计算它们。

,

在numpy中,使用给定的数组,仅进行具有实数值的计算。在numpy之外,Python使用复杂的值进行计算。

请注意,-0.41847852**e(-0.41847852)**e

不同 ,

纯Python有点在骗你。它不是实数,因为负数根为a。如果需要,请参阅下面的解决方法。它使用dtype=np.complex将其转换为复数,并使用.real将其更改为输出的纯python。

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
本文链接:https://www.f2er.com/3164413.html

大家都在问