python - 查找一个数据集中的数据在另一数据集中的对应关系

标签 python arrays numpy scipy kdtree

我有a catalogue of data我想在我的 MCMC 代码中使用它。至关重要的是执行速度,以避免减慢我的马尔可夫链蒙特卡洛采样速度。 问题: 在目录中,我在第一列和第二列中有两个参数,分别为 radec,它们是天空坐标:

data=np.loadtxt('Final.Cluster.Shear.NegligibleShotNoise.Redshift.cat')
ra=data[:,0]
dec=data[:,1]

那么在七列和八列的XY位置,即网格坐标,它们是网格空间中的点

Xpos=data[:,6]
Ypos=data[:,7]

在我编写的函数中,需要调用它一百万次, 我将给出一个 XcenterYcenter 位置(例如 Xcenter=200.6、Ycenter=310.9)作为函数的输入,我想在 中找到对应点>radec 列。然而,输入可能在 radec 中没有任何真正的对应关系。因此,我想进行插值,以防 XY 以及 radec 没有类似的条目目录中的数据,并根据目录中真实的radec条目获取插值坐标。

最佳答案

这是一个完美的案例,其中 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() 非常有效地获取 radec 值:

dists, indices = k.query(xyCenters)
myra = np.take(ra, indices)
mydec = np.take(dec, indices)

关于python - 查找一个数据集中的数据在另一数据集中的对应关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550813/

相关文章:

python - 如何在discord.py 中创建discord.Permissions 对象?

php - 对 mysql 行中的条目对进行排序/排序

java - 使用随机中心点的同心圆

python - 从日期时间创建 numpy linspace

python - FFT 频谱中的 0 是白色的?,为什么? - 开放式简历

python - OpenCV Python - 无法导入贡献模块

python - 属性错误 : read in Python

python - 如何确定文本的编码

php - 在 jQuery 中以数组形式接收 input[] 的所有值以发送到 PHP 脚本

python - Numpy 索引 : first (varying) number of elements from each row in 2d array