numpy 超球面坐标实现

prdp8dxp  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(97)

有没有人知道一个经过良好测试的,可靠的超球面坐标实现,将笛卡尔向量转换为球面角?我更喜欢python,但如果需要,我可以翻译它。
换句话说,本质上与this question相反。
在你告诉我实现起来很简单之前,下面是我的实现(对于5维空间):

def theta(x):
   n = 5
   x = np.array(x)
   toFill = np.array([0.0, 0.0, 0.0, 0.0])
   r_array = np.sqrt( np.array( [ sum( [xj**2 for xj in x[i+1:]] ) for i in range(0,n-1) ] ) )
   for k in range(0,n-2): 
      toFill[k] = np.arctan2( r_array[k] , x[k] ) 
   toFill[n-2] = 2 * np.arctan2( x[n-1] , ( x[n-2] + np.sqrt(x[n-1]**2 + x[n-2]**2) ) ) 
   return toFill

字符串
请注意,我只关心Angular ,而不是半径。实现本质上是从这里开始的。
它看起来是有效的,但是我在一些模拟中得到了一些奇怪的结果(我认为这可能是由于这种方法,虽然我还没有直接发现问题)。如果你能在这里看到一些边界条件问题,请告诉我。

5uzkadbs

5uzkadbs1#

在Numpy中实现并不难,只是有点令人沮丧。
这里有一些工作代码,它给出了与你相同的结果。我也使用逆笛卡尔变换测试了它。代码将只对许多和高维向量有效,虽然。

def angular_coordinates(x):
    """
    Calculate angular coordinates of the vectors in `x` along the first axis.

    Source:
    https://en.wikipedia.org/wiki/N-sphere#Spherical_coordinates
    """
    a = x[1:] ** 2
    b = np.sqrt(np.cumsum(a[::-1], axis=0))
    phi = np.arctan2(b[::-1], x[:-1])
    phi[-1] *= np.sign(x[-1])
    return phi

字符串

相关问题