Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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 Numpy查找距指定点的三维坐标距离_Python_Loops_Numpy - Fatal编程技术网

Python Numpy查找距指定点的三维坐标距离

Python Numpy查找距指定点的三维坐标距离,python,loops,numpy,Python,Loops,Numpy,我正在用python查找与指定点的三维距离。现在,我正在使用for循环。但是计算起来有点慢 下面是python代码: for i_y in xrange(0,500,100): y = round(i_y/100.00,2) for i_x in xrange(0, 800, 1): x = round(i_x/100.00,2) for i_z in xrange(500, 0, -1):

我正在用python查找与指定点的三维距离。现在,我正在使用for循环。但是计算起来有点慢

下面是python代码:

    for i_y in xrange(0,500,100):
        y = round(i_y/100.00,2)

        for i_x in xrange(0, 800, 1):
            x = round(i_x/100.00,2)

            for i_z in xrange(500, 0, -1):
                z = round(i_z/100.00,2)

                    for key in specifiedPoints.keys():
                    a = specifiedPoints[key]

                        subx1 = x-a.p1.x
                        suby1 = y-a.p1.y
                        subz1 = z-a.p1.z
                        subx2 = x-a.p2.x
                        suby2 = y-a.p2.y
                        subz2 = z-a.p2.z
                        subx3 = x-a.p3.x
                        suby3 = y-a.p3.y
                        subz3 = z-a.p3.z

                        distver1 = math.sqrt(subx1*subx1+suby1*suby1+subz1*subz1)
                        distver2 = math.sqrt(subx2*subx2+suby2*suby2+subz2*subz2)        
                        distver3 = math.sqrt(subx3*subx3+suby3*suby3+subz3*subz3)

                        if distver1 <= 1 or distver2<=1 or distver3<=1:
                            print "close point:", x, y, z
xrange(0501000)中i_y的
:
y=圆形(i_y/100.00,2)
对于x范围内的i_x(0、800、1):
x=圆形(i_x/100.00,2)
对于X范围内的i_z(500,0,-1):
z=圆形(i_z/100.00,2)
对于指定点中的键。键()
a=指定的点[键]
subx1=x-a.p1.x
suby1=y-a.p1.y
subz1=z-a.p1.z
subx2=x-a.p2.x
suby2=y-a.p2.y
subz2=z-a.p2.z
subx3=x-a.p3.x
suby3=y-a.p3.y
subz3=z-a.p3.z
distver1=math.sqrt(subx1*subx1+suby1*suby1+subz1*subz1)
distver2=math.sqrt(subx2*subx2+suby2*suby2+subz2*subz2)
distver3=math.sqrt(subx3*subx3+suby3*suby3+subz3*subz3)

如果distver1您的arange函数可以直接返回您为x、y和z计算的值,那么将节省大量计算。根本不需要round函数。运行循环5*800*500=2.000.000次,每次除以100并取整。最好这样做:

    for y in np.arange(0,5,1):
        for x in np.arange(0,8,0.01):
            for z in np.arange(5,0,-0.01):
在一个数组中收集点,如以下代码所示

    point = np.array([x,y,z])
    a1 = np.array([a.p1.x,a.p1.y,a.p1.z])
    a2 = np.array([a.p2.x,a.p2.y,a.p2.z])
    a3 = np.array([a.p3.x,a.p3.y,a.p3.z])

    if np.linalg.norm(point-a1) <=1:
        print point
        continue
    if np.linalg.norm(point-a2) <=1:
        print point
        continue
    if np.linalg.norm(point-a3) <=1:
        print point
        continue
point=np.array([x,y,z])
a1=np.数组([a.p1.x,a.p1.y,a.p1.z])
a2=np.数组([a.p2.x,a.p2.y,a.p2.z])
a3=np.数组([a.p3.x,a.p3.y,a.p3.z])

如果np.linalg.norm(点a1),我将研究
scipy.space.distance
,尤其是
cdist
pdist
方法:


测试点是否始终是常规网格?在您的示例中,
i_z
i_y
i_z
来自常规for循环。如果是这样的话,那么你可以加速计算,尤其是当它被重复的时候。是的,测试点总是相同的x,y,z点。每次测试都可以更改指定点。
    point = np.array([x,y,z])

    if np.linalg.norm(point-a.p1) <=1:
        print point
        continue
    if np.linalg.norm(point-a.p2) <=1:
        print point
        continue
    if np.linalg.norm(point-a.p3) <=1:
        print point
        continue