【问题标题】:Processing different data through same equation通过相同的方程处理不同的数据
【发布时间】:2014-08-14 00:05:40
【问题描述】:

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

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

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

【问题讨论】:

  • 单位是什么?它们看起来不像极坐标,仅计算坐标的 x 或 y 值的(余)正弦是没有意义的..?
  • 它们是度数。输入看起来像: B=(((sin(58.05))*(sin(58.0551391)) + (cos(58.05)*cos(58.0551391))*(cos(223.251-223.25190261))))
  • @user3700386 您是否尝试过以下答案中的方法?

标签: python arrays loops numpy trigonometry


【解决方案1】:

如果您愿意使用 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 每一行的结果。

【讨论】:

    【解决方案2】:

    我不确定公式是否正确且数据是否具有代表性,因为您的值非常接近。无论如何,要打印数据中每个项目的 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

    【讨论】:

    • 谢谢!事实上,这些值是正确的,它们实际上是那么接近。
    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多