我想找到这两个,在一个meshgrid中找到一对值和它们的索引号,a与另一对值接近。假设我有两个向量a= np.array([0.01,0.5,0.9])
和b = np.array([0,3,6,10])
和两个网格X,Y = np.meshgrid(a,b)
。为了便于说明,它们如下所示:
X= array([[ 0.1, 0.5, 0.9],
[ 0.1, 0.5, 0.9],
[ 0.1, 0.5, 0.9],
[ 0.1, 0.5, 0.9]])
Y =array([[ 0, 0, 0],
[ 3, 3, 3],
[ 6, 6, 6],
[10, 10, 10]])
现在,我有另一个数组,名为c
,维数为(2xn)。为了便于说明,假设c
包含以下条目:
用x
表示c
的列向量。对于每个向量x
我想找到
^{$img1}
更复杂的是,事实上,我不仅在寻找距离最小(I,j)的索引,而且还寻找第二个最小距离(I',j')的索引。在
到目前为止,我所有的方法都是非常复杂的,而且涉及到很多旁道。有人知道如何有效地解决这个问题吗?在
这是一个评论而不是一个答案,但我喜欢[。。。感谢删除了许多内容,您仍然可以使用修订历史查看这些内容…]
完成修订
作为我自己评论的后续,请看以下内容
设置
解决方案
两行代码,请注意您必须传递
^{pr2}$c
数组的转置。在评论
为了解释结果,excellent scipy docs通知您,}中的每个点
tree.query()
返回两个数组,分别包含{k>=2
的数组,给出距离 从一点到网格上最近的点,第二个最近的点,等等k>=2
的数组,给出索引 指向最近的网格点(下一个网格点等)。在为了访问网格点,
KDTree
维护网格数据的副本,例如其中
[0,1]
是第二个输出数组的第一个元素。在如果需要网格矩阵中最近点的索引,只需使用^{} 。在
如果}和{}中是可分离的。只需找到}到{}的最接近元素-
你不需要计算二维度量。在
X, Y
总是来自meshgrid()
,那么你的最小化在{X
到c[0,]
的最近元素和{如果}具有统一的步骤,则如果将{}的相应值缩放到索引上,则可以节省更多时间。在您的示例中,}值。在
a
或{all(a == 0.1+0.4*arange(3))
,因此您可以通过反转来找到x
值:x = (c[0,] - 0.1)/0.4
。如果您有一个可逆(可能是非线性)函数,它将整数映射到b
上,您同样可以通过将逆函数应用于c[1,]
直接找到{相关问题 更多 >
编程相关推荐