我有a catalogue of data我想在我的 MCMC 代码中使用它。至关重要的是执行速度,以避免减慢我的马尔可夫链蒙特卡洛采样速度。
问题:
在目录中,我在第一列和第二列中有两个参数,分别为 ra
和 dec
,它们是天空坐标:
data=np.loadtxt('Final.Cluster.Shear.NegligibleShotNoise.Redshift.cat')
ra=data[:,0]
dec=data[:,1]
那么在七列和八列的X
和Y
位置,即网格坐标,它们是网格空间中的点
Xpos=data[:,6]
Ypos=data[:,7]
在我编写的函数中,需要调用它一百万次,
我将给出一个 Xcenter
和 Ycenter
位置(例如 Xcenter=200.6、Ycenter=310.9)作为函数的输入,我想在 中找到对应点>ra
和 dec
列。然而,输入可能在 ra
和 dec
中没有任何真正的对应关系。因此,我想进行插值,以防 X
和 Y
以及 ra
和 dec
没有类似的条目目录中的数据,并根据目录中真实的ra
和dec
条目获取插值坐标。
最佳答案
这是一个完美的案例,其中 scipy.spatial.cKDTree()
类可用于一次查询所有点:
from scipy.spatial import cKDTree
k = cKDTree(data[:, 6:8]) # creating the KDtree using the Xpos and Ypos
xyCenters = np.array([[200.6, 310.9],
[300, 300],
[400, 400]])
print(k.query(xyCenters))
# (array([ 1.59740195, 1.56033234, 0.56352196]),
# array([ 2662, 22789, 5932]))
其中[2662,22789,5932]
是与xyCenters
中给出的三个最近点相对应的索引。您可以使用这些索引通过 np.take()
非常有效地获取 ra
和 dec
值:
dists, indices = k.query(xyCenters)
myra = np.take(ra, indices)
mydec = np.take(dec, indices)
关于python - 查找一个数据集中的数据在另一数据集中的对应关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550813/