2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您查看 的源代碼,np.angle它會(huì)使用該函數(shù)np.arctan2?,F(xiàn)在,根據(jù)numpy 文檔,np.arctan2使用底層 C 庫(kù),它具有以下規(guī)則:
請(qǐng)注意,+0 和 -0 是不同的浮點(diǎn)數(shù),+inf 和 -inf 也是如此。
使用 計(jì)算時(shí)會(huì)導(dǎo)致不同的行為+/-0。因此,在這種情況下,規(guī)則是:
y: +/- 0
x: <0
angle: +/- pi
現(xiàn)在,如果你嘗試:
a = 55.74947517067784019673
print(f'{-a == -1 * a}, {np.angle(-a)}, {np.angle(-1 * a)}')
#True, 3.141592653589793, 3.141592653589793
如果你嘗試:
a = 55.74947517067784019673 + 0j
print(-a)
#(-55.74947517067784-0j)
print(-1*a)
#(-55.74947517067784+0j)
print(f'{-a == -1 * a}, {np.angle(-a)}, {np.angle(-1 * a)}')
#True, -3.141592653589793, 3.141592653589793
這符合庫(kù)協(xié)議。
至于你的第二個(gè)問(wèn)題,我想這是一個(gè)錯(cuò)字/錯(cuò)誤,因?yàn)?code>np.arctan2文檔說(shuō):
以弧度為單位的角度數(shù)組,在[-pi, pi]范圍內(nèi)。如果 x1 和 x2 都是標(biāo)量,則這是一個(gè)標(biāo)量。
-a
vs.的解釋-1*a
:
首先,55.74947517067784019673 + 0j
不是構(gòu)造一個(gè)復(fù)數(shù),而只是將一個(gè)浮點(diǎn)數(shù)加到一個(gè)復(fù)數(shù)上(要構(gòu)造一個(gè)復(fù)數(shù),請(qǐng)明確使用并注意整數(shù)沒(méi)有帶符號(hào)的零,只有浮點(diǎn)數(shù)有)。只是恢復(fù)標(biāo)志并且非常不言自明。讓我們看看計(jì)算時(shí)會(huì)發(fā)生什么:complex(55.74947517067784019673, 0.0)
-a
-1*a
為簡(jiǎn)單起見(jiàn)假設(shè)a = 55.5 + 0j
首先
a = 55.5+0j
轉(zhuǎn)換為complex(55.5, 0.0)
第二
-1
等于complex(-1.0, 0.0)
然后
complex(-1.0, 0.0)*complex(55.5, 0.0)
等于等于complex((-1.0*55.5 - 0.0*0.0), (-1.0*0.0 + 0.0*55.5))
然后complex((-55.5 - 0.0), (-0.0 + 0.0))
等于complex(-55.5, 0.0)
。
請(qǐng)注意,-0.0+0.0
等于0.0
和符號(hào)規(guī)則僅適用于乘法和除法,并在下面的評(píng)論中引用。為了更好地理解它,請(qǐng)看這個(gè):
print(complex(-1.0,?-0.0)*complex(55.5,?0.0)) #(-55.5-0j)
虛部在哪里(-0.0*55.5 - 1.0*0.0) = (-0.0 - 0.0) = -0.0

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于 1) print-a
和-1*a
,您會(huì)發(fā)現(xiàn)它們是不同的。
-a Out[4]: (-55.74947517067784-0j) -1*a Out[5]: (-55.74947517067784+0j) # note +0j not -0j
在不知道 numpy 實(shí)現(xiàn)細(xì)節(jié)的情況下,虛部的符號(hào)可能用于計(jì)算角度......這可以解釋為什么這種退化的情況會(huì)給出不同的結(jié)果。
對(duì)于 2) 這對(duì)我來(lái)說(shuō)看起來(lái)像是一個(gè)錯(cuò)誤或 doco 錯(cuò)誤......
添加回答
舉報(bào)