用同一方程处理不同的数据

2024-04-26 01:21:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数组:

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

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


Tags: 代码程序id定义结尾数字数组sin
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。你知道吗

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

相关问题 更多 >

    热门问题