Math 使用numpy将极坐标转换为笛卡尔坐标的智能方法

Math 使用numpy将极坐标转换为笛卡尔坐标的智能方法,math,numpy,geometry,coordinates,polar-coordinates,Math,Numpy,Geometry,Coordinates,Polar Coordinates,我有一个笛卡尔坐标数组,由极坐标以通常的方式生成: for k in range(0, Phi_term): for j in range(0, R_term): X[k,j] = R[j]*np.cos(phi[k]); Y[k,j] = R[j]*np.sin(phi[k]); 问题是这样一个数组的第0个元素对应于极圆的原点。我希望有一个相同元素的数组,但从右上角开始。例如,当前数组中的元素按以下方式分布(对于上半部分): (想象它是一个圆)。我想要

我有一个笛卡尔坐标数组,由极坐标以通常的方式生成:

for k in range(0, Phi_term):
    for j in range(0, R_term):
        X[k,j] = R[j]*np.cos(phi[k]);
        Y[k,j] = R[j]*np.sin(phi[k]);
问题是这样一个数组的第0个元素对应于极圆的原点。我希望有一个相同元素的数组,但从右上角开始。例如,当前数组中的元素按以下方式分布(对于上半部分):

(想象它是一个圆)。我想要得到的是从第0个元素开始的网格:

0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
虽然保留了这些值,即初始数组的第11个元素的值现在是新数组的第0个元素的值

numpy
中有没有什么聪明的方法来执行这样的转换

def quasiCartesianOrder(arr, R_term, Phi_term):
       # deal with odd phi count by starting from top of top spike.
       rhsOddOffset = 0
       if Phi_term % 2 == 1:
          rhsOddOffset = R_term
          for r in xrange(0, R_term):
             yield (Phi_term + 1)/2 * R_term - r - 1

       # 'rectangular' section, starting down 11 o'clock and up 1 o'clock.
       phiBaseLeft = Phi_term / 2 + rhsOddOffset/R_term
       phiBaseRight = Phi_term / 2
       for phiLine in xrange(0, Phi_term / 2):
          # down 11
          base = (phiBaseLeft + phiLine) * R_term - 1
          for idx in xrange(base + R_term, base, -1):
             yield idx

          # up 1
          base = (phiBaseRight - phiLine ) * R_term
          for idx in xrange(base - R_term, base):
             yield idx
行为:

        11
        10
        9
14 13 12 6 7 8
17 16 15 3 4 5
20 19 18 0 1 2
变成

        0
        1
        2
 3 4  5  6  7  8
 9 10 11 12 13 14
15 16 17 18 19 20
结果

11 10 9 14 13 12 6 7 8 17 16 15 3 4 5 20 19 18 0 1 2

样式是一个生成器,因此可以进行迭代。如果您只需要索引本身,请使用返回的生成器调用
list
,您应该能够将其与numpy的索引数组一起使用。

对于我来说,不清楚您想要实现什么。。。你能给出一个你期望的输入和输出的例子吗?你真的想要笛卡尔坐标,还是想要描述顺序的极坐标?
11 10 9 14 13 12 6 7 8 17 16 15 3 4 5 20 19 18 0 1 2