Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 组织三维点,并根据与某个位置的距离找到它们_Python_Algorithm - Fatal编程技术网

Python 组织三维点,并根据与某个位置的距离找到它们

Python 组织三维点,并根据与某个位置的距离找到它们,python,algorithm,Python,Algorithm,我在3D环境下工作。我在这个空间中有一些物体,它们由x,y,z位置表示 # My objects names (in my real context it's pheromone "point") A = 1 B = 2 C = 3 D = 4 # My actual way to stock their positions pheromones_positions = { (25, 25, 60): [A, D], (10, 90, 30): [B], (5, 85,

我在3D环境下工作。我在这个空间中有一些物体,它们由x,y,z位置表示

# My objects names (in my real context it's pheromone "point")
A = 1
B = 2
C = 3
D = 4

# My actual way to stock their positions
pheromones_positions = {
    (25, 25, 60): [A, D],
    (10, 90, 30): [B],
    (5, 85, 8): [C]
}
我的目标是找到信息素在给定位置附近的点。我这样做只是为了:

def calc_distance(a, b):
    return sqrt((a[0]-b[0])**2+(a[1]-b[1])**2+(a[2]-b[2])**2)

def found_in_dict(search, points, distance):
    for point in points:
        if calc_distance(search, point) <= distance:
            return points[point]

founds = found_in_dict((20, 20, 55), pheromones_positions, 10)
# found [1, 4] (A and D)
但是,有很多信息素,一个接一个的测试是非常缓慢的。。。。我如何组织这些3D位置,以便根据与给定位置的距离更快地找到位置?
是否存在算法或库numpy?谁能在这方面帮助我

您应该一次计算所有平方距离。使用NumPy,您可以简单地从所有位置坐标的nx3数组中减去大小为1x3的目标点,并将平方坐标差相加,以获得包含n个元素的列表:

squaredDistances = np.sum((np.array(pheromones_positions.keys()) - (20, 20, 55))**2, axis=1)
idx = np.where(squaredDistances < 10**2)[0]
print pheromones_positions.values()[idx]

顺便说一句:由于return语句在所有点上都位于for循环中,因此它将在找到第一个点后停止迭代。因此,您可能会错过第二场或第三场比赛。

我不是这方面的专家,但您可以跳过SQRT并与calc_distancesearch进行比较,指向Thx!有关问题的用户建议使用numpy数组存储信息素。如果信息素的位置是numpy阵列,你的答案是什么?
[1, 4]