Python 在N维numpy数组中查找最近集
假设我有一个numpy数组,由所有这些范围的组合组成:Python 在N维numpy数组中查找最近集,python,numpy,multidimensional-array,scipy,Python,Numpy,Multidimensional Array,Scipy,假设我有一个numpy数组,由所有这些范围的组合组成: A = numpy.arange(0.05, 7.05, 0.5) B = numpy.arange(0.0,0.75, 0.15 ) C = numpy.arange(8.0, 12.0, 0.15) D = numpy.arange(-2, 2, 0.15) E = [0.5, 0.55, 0.6, 0.65, 0.7] F = numpy.arange(0.1,2.1, 0.1) G = [0.5, 1.0, 1.5] 生成的数组称
A = numpy.arange(0.05, 7.05, 0.5)
B = numpy.arange(0.0,0.75, 0.15 )
C = numpy.arange(8.0, 12.0, 0.15)
D = numpy.arange(-2, 2, 0.15)
E = [0.5, 0.55, 0.6, 0.65, 0.7]
F = numpy.arange(0.1,2.1, 0.1)
G = [0.5, 1.0, 1.5]
生成的数组称为A
,共有7行15309000列
现在我有一个理由:
group = [a ,b, c, d, e, f, g] = [1.22, 0.34, 9.45, -1.43, 0.52, 0.23, 0.64]
我正在寻找一种方法来找到a中最接近前一组的组合,即所选集合(最接近的组合)将是所有值都最接近要查找的组的组:a将是a中最接近的值,b将是b中最接近的值,等等
对于这种特殊情况,最接近的组是:
closest_group = [1.05, 0.3, 9.5, -1.4, 0.5, 0.2, 0.5]
我找到了一个不同的答案,如scipy.signal.KDTree
,例如:
A[spatial.KDTree(A).query(set)[1]]
但不幸的是,这并没有收敛,导致了这一错误:
递归错误:超过最大递归深度
需要定义“最近的”。使用的距离概念是什么?FWIW,
set
是内置类型和函数。你应该考虑用另一种方式命名变量,比如my_set
。比如:((A-B[:,None])**2.sum(0).argmin()
,其中A
是你的(715309000)数组,B
是set数组?使用einsum
和matrix multiply
-我为评论中要求的更改编辑了帖子。在您的解释中,您是否重复使用了A
这个名称?第一个代码块的第一行是A=numpy.arange(0.05,7.05,0.5)
,但是您说“生成的数组称为A
…”。