我想计算两个不同集合中所有点之间的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进行了比较,这是一个面向软件天文学的方法。有什么建议吗?
答案 0 :(得分:0)
我已经解决了这个问题:我必须将正确的提升和衰退从度数转换为弧度。现在,该方法有效。