簡體   English   中英

通過相同的方程式處理不同的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM