[英]Processing different data through same equation
我有一個看起來像這樣的數組:
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( RR)。
其中(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
但這只是第一行坐標,我希望手動完成
我不確定公式是否正確並且可以表示數據,因為您的值之間確實很接近。 無論如何,要打印數據中每個項目的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
。
如果您願意使用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
每一行的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.