python中的dsearchn等价物

python中的dsearchn等价物,python,python-3.x,matlab,numpy,scipy,Python,Python 3.x,Matlab,Numpy,Scipy,是否有一个Scipy或Numpy函数在python中执行dsearchnMATLAB命令 dsearchn返回与给定向量中输入值最接近的值的索引。您可以执行以下操作: x = np.array([1.1, 1.2, 1.22, 1.4]) v = 1.21 def dsearchnn(x, v): return np.where(np.abs(x-v) == np.abs(x-v).min())[0] dsearchnn(x, v) array([1,2]) 近似等效效率的方法可能

是否有一个Scipy或Numpy函数在python中执行
dsearchn
MATLAB命令


dsearchn
返回与给定向量中输入值最接近的值的索引。

您可以执行以下操作:

x = np.array([1.1, 1.2, 1.22, 1.4])
v  = 1.21

def dsearchnn(x, v):
    return np.where(np.abs(x-v) == np.abs(x-v).min())[0]
dsearchnn(x, v)
array([1,2])

近似等效效率的方法可能是scipy或更好的方法:

这里
p
PQ
是来自文档的点和查询点。MATLAB使用第一个维度作为点的维度,而scipy使用最后一个维度,因此使用转置


与MATLAB方法不同,它是一步完成的,使用
KDTree
us分两步完成:首先构建树对象,然后在树对象上运行。是否有方法检测具有相同距离的两个索引?例如,在x=[1.1,1.2,1.22,1.3,1.4]中,值1.2和1.22与
v
的距离相同。是的,刚刚编辑了答案。浮点精度可能有问题@Enigmacy
dsearchn
用于多维点,而不仅仅是scalars它的语法与MATLAB的
dsearchn
类似吗?因为它没有给出欧氏空间中距离最小的值的指数。我也看了文档,但我不知道它是如何工作的,以及为什么你要转置
PQ
PQ
可以是一个标量,不需要转置。@Enigmacy。根据文档,scipy和Matlab版本相互向后解释尺寸。如果数组的格式已经正确,则无需转置。
query
的返回值包含一个值和一个索引。你读了哪些文档?我从Scipy v1.6.1中查看了这一点,这是一个良好的开端。我们也来看看查询方法。我在答案中添加了一个链接和一个简介:
from scipy.spatial import KDTree

kdt = KDTree(P.T)
kdt.query(PQ.T)