亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

numpy angle 函數為相同的輸入返回不同的答案?

numpy angle 函數為相同的輸入返回不同的答案?

紅顏莎娜 2023-06-20 14:06:04
我正在使用 Python 3.7.7 和 numpy 1.19.1。這是代碼:import numpy as np a = 55.74947517067784019673 + 0j print(f'{-a == -1 * a}, {np.angle(-a)}, {np.angle(-1 * a)}')這是輸出:True, -3.141592653589793, 3.141592653589793我有兩個問題:為什么角度函數對于相同的輸入給出不同的輸出?根據文檔,角度輸出范圍是(-pi, pi],那么為什么其中一個輸出是-np.pi?
查看完整描述

2 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

如果您查看 的源代碼,np.angle它會使用該函數np.arctan2?,F在,根據numpy 文檔,np.arctan2使用底層 C 庫,它具有以下規則:


請注意,+0 和 -0 是不同的浮點數,+inf 和 -inf 也是如此。


使用 計算時會導致不同的行為+/-0。因此,在這種情況下,規則是:


y: +/- 0

x: <0

angle: +/- pi

現在,如果你嘗試:


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

這符合庫協議。

至于你的第二個問題,我想這是一個錯字/錯誤,因為np.arctan2文檔說:

以弧度為單位的角度數組,在[-pi, pi]范圍內。如果 x1 和 x2 都是標量,則這是一個標量。

-avs.的解釋-1*a

首先,55.74947517067784019673 + 0j不是構造一個復數,而只是將一個浮點數加到一個復數上(要構造一個復數,請明確使用注意整數沒有帶符號的零,只有浮點數有)。只是恢復標志并且非常不言自明。讓我們看看計算時會發生什么:complex(55.74947517067784019673, 0.0)-a-1*a

為簡單起見假設a = 55.5 + 0j

  • 首先a = 55.5+0j轉換為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)。

請注意,-0.0+0.0等于0.0和符號規則僅適用于乘法和除法,并在下面的評論中引用。為了更好地理解它,請看這個:

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


查看完整回答
反對 回復 2023-06-20
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

對于 1) print-a-1*a,您會發現它們是不同的。

-a
Out[4]: (-55.74947517067784-0j)

-1*a
Out[5]: (-55.74947517067784+0j) # note +0j not -0j

在不知道 numpy 實現細節的情況下,虛部的符號可能用于計算角度......這可以解釋為什么這種退化的情況會給出不同的結果。

對于 2) 這對我來說看起來像是一個錯誤或 doco 錯誤......


查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號