创建一个不考虑欧氏距离的圆角数组 python

Create a circle array of angles to not consider euclidean distance python

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

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° 有多接近,一个非零值应该出现在这个计算的转换矩阵中。但是,由于欧式距离,它 returns 0.

我尝试切换事件空间并使它们成为:0, 0.5,...,180,179.5,...,0,5 但它不起作用,因为又是欧基德距离,因为它会给出非-考虑 90° 时为零,等效于 270°(在这种情况下为 90)。

为了使其正常运行,我需要在圆圈中显示角度值,因为它们通常会出现在图表中。

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

我有点困惑,因为你使用的是度数,而不是弧度,但是如果你想要 angular 与 属性 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