与 numpy.unwrap 相反

新手上路,请多包涵

在 Python numpy 中,有一个 unwrap 函数:

通过将大于 discont 的绝对跳跃更改为沿给定轴的 2*pi 补码来展开弧度相位 p。

现在,我想做相反的功能。我如何 包装 一系列阶段?例如,如何转换所有角度以将它们限制在-π 和π 之间?

显而易见的方法是做类似的事情:

 for i, a in enumerate(phases):
    while a < pi:
        a += 2 * pi
    while a > pi:
        a -= 2 * pi
    phases[i] = a

但是有更简单/更快的方法吗?

原文由 Charles Brunet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答
phases = (phases + np.pi) % (2 * np.pi) - np.pi

原文由 sega_sai 发布,翻译遵循 CC BY-SA 4.0 许可协议

import numpy as np
phases = np.arctan2(np.sin(phases), np.cos(phases))

这是有效的,因为 sin(phases)/cos(phases) == tan(phases)。我们通过使用反正切函数得到反向相位(模 2π)。在数学上,反正切函数是多值的,因此在编程语言中通常定义为以固定间隔返回相位。

双参数反正切函数,即 np.arctan2(numerator, denominator) 与常规反正切函数相同,只是它跟踪分子和分母的符号,因此能够返回相位模 2π,而不是常规 np.arctan(numerator/denominator) 只能返回相位模 π 的函数。 Numpy 对 arctan2 函数的实现定义为返回 [-π, +π] 范围内的相位,这是 OP 请求的范围。

附加说明:此 arctan2 方法直接从复数表示得出,并且在数学上完全等同于:

 phases = np.angle(np.exp(1j*phases))

这可能更直观。事实上,numpy 的 angle 函数使用 arctan2 在幕后分离指数的虚部和实部,即正弦和余弦。

原文由 u55 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题