为了账号安全,请及时绑定邮箱和手机立即绑定

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。现在,根据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 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信