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