通过相同的方程处理不同的数据

时间:2014-06-23 20:15:43

标签: python arrays loops numpy sin

我有一个如下所示的数组:

A=[  id.                 r            d    ]
[[  47.          223.25190261   58.0551391 ]
 [  49.          223.25102751   58.05662719]
 [  57.          223.25013049   58.05139459]]

第一栏并不重要。但是,以下两个是坐标。

我必须将这些坐标(第2列和第3列)与这些坐标进行比较: (223.251,58.05)使用这个等式:B = sin(D)sin(d)+ cos(D)cos(d)cos(R-r)。

其中(R,D)是原始坐标(223.251,58.05),(r,d)是数组中的坐标。 如何对阵列中的每组坐标执行此操作,而不必自己输入数字或必须定义每个数字并用下一组坐标替换它们?我希望程序显然保持(R,D)一致并改变(r,d)每一行并进行计算。在完成每行的计算之后,我想让它们输出。我真的不知道该怎么做,我想也许有一个循环。我很丢失。 代码的结尾是这样的:

B=(((sin(dec0))*(sin(dec1)) + (cos(dec0)*cos(dec1))*(cos(ra0-ra1))))
print B
0.540302302454

但这只是第一排坐标,我希望手动完成

2 个答案:

答案 0 :(得分:0)

我不确定公式是否正确且数据具有代表性,因为您的值非常接近。无论如何,要打印数据中每个项目的B值,您可以使用:

from math import radians, sin, cos

orig = (223.251, 58.05)
R = radians(orig[0])
D = radians(orig[1])

A = [[  47.,  223.25190261,   58.0551391 ],
     [  49.,  223.25102751,   58.05662719],
     [  57.,  223.25013049,   58.05139459]]

for item in A:
  r = radians(item[1])
  d = radians(item[2])
  B = sin(D)*sin(d) + cos(D)*cos(d)*cos(R-r)
  print(B)

如果您已将numpy数组作为输入,请使用numpy模块而不是math

答案 1 :(得分:0)

如果您愿意使用NumPy,您可以对操作进行矢量化,避免使用for循环:

from numpy import array, deg2rad, sin, cos

orig = (223.251, 58.05)
R = deg2rad(orig[0])
D = deg2rad(orig[1])

A = array([[47., 223.25190261, 58.0551391 ],
           [49., 223.25102751, 58.05662719],
           [57., 223.25013049, 58.05139459]])

r = deg2rad(A[:,1])
d = deg2rad(A[:,2])
B = sin(D)*sin(d) + cos(D)*cos(d)*cos(R-r)

其中Bnumpy.ndarray,其中包含A每行的结果。