创建一个角度的圆形数组不考虑欧几里得距离python

时间:2018-08-15 07:43:11

标签: python numpy angle

我正在尝试使用以下代码创建转换矩阵:

transition_matrix[0:720,:] = (1 / np.sqrt(2 * np.pi * sigma_n2)) * np.exp(-( np.abs(eventspace_psi_i_min_1 - eventspace_psi_i) )**2 / (2 * sigma_n2))

之后的公式只是高斯分布。

事件空间是720个元素的数组,所有元素的角度都应从0,0.5,...,359.5开始。 知道0°和359.5°的接近程度后,此计算的过渡矩阵中应该出现一个非零值。但是,由于欧几里得距离,它返回0。

我尝试切换事件空间并将其设置为:0、0.5,...,180、179.5,...,0、5,但由于欧基德距离再次出现问题,因此它不起作用,因为它将给出非零值考虑90°和270°的等效角(在这种情况下为90)。

为了使其正常执行,我需要将角度值像通常在图中显示的那样放在一个圆圈中。

任何人都可以帮助我了解如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

我有点困惑,因为您使用的是度数,而不是弧度,但是如果您希望属性0 ≤ δ ≤ 180具有一定的角度距离,您可以像这样

def distance(φ, θ):
    from numpy import abs
    δ = abs(φ-θ)         #    0 ≤ δ < 360
    δ[δ>=180] -= 360     # -180 ≤ δ < 180
    return abs(δ)        #    0 ≤ δ ≤ 180

编辑

您的角度在[0,360)区间内,但并非总是如此,因此最好对它们进行规范化,此外,如果参数都是标量,则将TypeError引发,因此最好将360减量封装到try except子句中。

def distance(φ, θ):
    from numpy import abs
    δ = abs(φ%360 - θ%360)  #    0 ≤ δ < 360
    try:
        δ[δ>=180] -= 360    # -180 ≤ δ < 180
    except TypeError:
        if δ >= 180 : δ -= 360
   return abs(δ)            #    0 ≤ δ ≤ 180