因此,您在空间中具有一组“探索”点,以及一组“未探索”点。您想选择K个未探索点进行探索,以使从未探索点到最接近的探索点的平均距离最小。
[这比通过蛮力一遍一遍地选择未探索的点并测量平均距离更有效吗?
我下面有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) )