获取角度范围 0 - 2*pi - python
Get angle into range 0 - 2*pi - python
在我的模拟中,我计算了一个阶段的多个值,例如
phi = np.linspace(-N,N,1000)
其中 N 可以很大。
有没有一种简单的方法可以将值映射到区间 [0,2pi)?
这样行吗?
import numpy as np
import math
N=10
phi = np.linspace(-N,N,1000)
phi = phi%(2*math.pi)
print(phi)
输出
[2.56637061 2.58639063 ... 3.69679467 3.71681469]
听起来您也在寻找 np.interp. Scipy offers an interpolate 函数。
作为用法示例,将 phi 的值(介于 -N 和 N 之间)映射到 [0, 2π] try
np.interp(phi, (-N, N), (0, 2*np.pi))
要排除 2π,您可以更改上限,这样就没有值映射到 2π 上了。
np.interp(phi, (-N, N + 1), (0, 2*np.pi))
或减少您在 phi 中包含的最大值
phi = np.linspace(-N, N, 1000, endpoint=False)
我相信直接询问值会更容易。
例如[0, 2π]范围内的1000个点可以由
给出
np.linspace(0, 2*np.pi, 1000)
并且对于排除值 2π
的范围 [0, 2π)
np.linspace(0, 2*np.pi, 1000, endpoint=False)
另一种可能的方式:
首先,使用np.arctan2(np.sin(angle), np.cos(angle))
转换为[-pi, pi]区间。然后,您仍然需要转换负值。像这样的最终功能将起作用:
def convert_angle_to_0_2pi_interval(angle):
new_angle = np.arctan2(np.sin(angle), np.cos(angle))
if new_angle < 0:
new_angle = abs(new_angle) + 2 * (np.pi - abs(new_angle))
return new_angle
确认,运行:
angles = [10, 200, 365, -10, -180]
print(np.rad2deg([convert_angle_to_0_2pi_interval(np.deg2rad(a)) for a in angles]))
...打印:[ 10., 200., 5., 350., 180.]
在我的模拟中,我计算了一个阶段的多个值,例如
phi = np.linspace(-N,N,1000)
其中 N 可以很大。
有没有一种简单的方法可以将值映射到区间 [0,2pi)?
这样行吗?
import numpy as np
import math
N=10
phi = np.linspace(-N,N,1000)
phi = phi%(2*math.pi)
print(phi)
输出
[2.56637061 2.58639063 ... 3.69679467 3.71681469]
听起来您也在寻找 np.interp. Scipy offers an interpolate 函数。
作为用法示例,将 phi 的值(介于 -N 和 N 之间)映射到 [0, 2π] try
np.interp(phi, (-N, N), (0, 2*np.pi))
要排除 2π,您可以更改上限,这样就没有值映射到 2π 上了。
np.interp(phi, (-N, N + 1), (0, 2*np.pi))
或减少您在 phi 中包含的最大值
phi = np.linspace(-N, N, 1000, endpoint=False)
我相信直接询问值会更容易。
例如[0, 2π]范围内的1000个点可以由
给出np.linspace(0, 2*np.pi, 1000)
并且对于排除值 2π
的范围 [0, 2π)np.linspace(0, 2*np.pi, 1000, endpoint=False)
另一种可能的方式:
首先,使用np.arctan2(np.sin(angle), np.cos(angle))
转换为[-pi, pi]区间。然后,您仍然需要转换负值。像这样的最终功能将起作用:
def convert_angle_to_0_2pi_interval(angle):
new_angle = np.arctan2(np.sin(angle), np.cos(angle))
if new_angle < 0:
new_angle = abs(new_angle) + 2 * (np.pi - abs(new_angle))
return new_angle
确认,运行:
angles = [10, 200, 365, -10, -180]
print(np.rad2deg([convert_angle_to_0_2pi_interval(np.deg2rad(a)) for a in angles]))
...打印:[ 10., 200., 5., 350., 180.]