如何有效地选择降低到已知点平均距离的点?

问题描述 投票:1回答:1

因此,您在空间中具有一组“探索”点,以及一组“未探索”点。您想选择K个未探索点进行探索,以使从未探索点到最接近的探索点的平均距离最小。

Sketch of the problem

[这比通过蛮力一遍一遍地选择未探索的点并测量平均距离更有效吗?

我下面有python函数可以完成工作。但是对于大型集,由于它变得非常慢,因此不可行。我想将其用于至少数十万个未开发的点集。因此,它需要更有效。我不需要最佳解决方案,可以很好地近似!

如果没有嵌套的for循环就可以做到这一点吗?

或者是否可以通过某种方式仅选择最可能的分数进行评估?

所有想法将不胜感激!

import numpy as np

explored = np.random.rand(100,3)
unexplored = np.random.rand(100000,3)

def k_anchors(explored, unexplored, K):

    anchors = np.empty((K, unexplored.shape[1]))

    for j in range(K):
        proximity_sum = np.zeros((len(unexplored),))

        for k in range(len(unexplored)):
            temp_results = np.concatenate(( explored, unexplored[k].reshape((-1,3)) ))
            proximity = np.zeros((len( unexplored ),))

            for i in range(len( unexplored )):
                i_prox = (abs((unexplored[i,:] - temp_results))).sum(axis=1)
                proximity[i] = i_prox.min()

            proximity_sum[k] = proximity.sum()

        idx = np.argmin( proximity_sum )
        anchors[j,:] = unexplored[ idx ]
        unexplored = np.delete(unexplored, idx, 0)
        explored = np.concatenate(( explored, unexplored[ idx ] ))

    return anchors

print( k_anchors(explored, unexplored, 5) )
python algorithm numpy mathematical-optimization graph-algorithm
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.