用theano计算两组天空位置的天文距离

时间:2018-05-11 14:17:05

标签: python python-3.x theano astronomy

我想计算两个不同集合中所有点之间的angular distance,例如cdist scipy,但使用不同的距离算法并使用theano。在(0,2pi)中具有右上升(ra)和在(-pi / 2,pi / 2)中具有偏角(dec)的两个源之间的角距离是:

theta = arccos(sin(dec1)*sin(dec2)+cos(dec1)*cos(dec2)*cos(ra1-ra2))

假设X是由N来源组成的矩阵,其位置为(ra, dec)

#RA     DEC 
54.29   -35.19  
54.62   -35.45
...

W是其他来源M来源不同。如何确定所有X来源的所有W来源的角度分离?

灵感来自欧几里德距离:

edist = T.sqrt((X ** 2).sum(1).reshape((X.shape[0], 1)) + (W ** 2).sum(1).reshape((1, W.shape[0])) - 2 * X.dot(W.T))

我尝试过:

d = T.arccos(\\
T.sin(X.reshape((X.shape[0], 1, -1))[...,1])*T.sin(W.reshape((1, W.shape[0], -1))[..., 1])+\\
T.cos(X.reshape((X.shape[0], 1, -1))[...,1])*T.cos(W.reshape((1, W.shape[0], -1))[..., 1])*\\
T.cos(X.reshape((X.shape[0], 1, -1))[...,0] -W.reshape((1, W.shape[0], -1))[...,0]))

生成的d矩阵的形状为(N, M)而不是(N, M, 2),因为我希望对第三个轴求和;数值结果是错误的(我将它与TOPCAT进行了比较,这是一个面向软件天文学的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题:我必须将正确的提升和衰退从度数转换为弧度。现在,该方法有效。