我有一个如下所示的数组:
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
但这只是第一排坐标,我希望手动完成
答案 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)
其中B
是numpy.ndarray
,其中包含A
每行的结果。