[英]Numpy finding 3d coordinate distance from a specified point
我正在努力從python中的指定點找到3D距離。 現在,我正在使用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
我工作了很多,但我找不到一個明確的教程,顯示numpy中的相等循環。
我怎么能在numpy中加速循環呢?
謝謝
你的arange函數可以直接返回你為x,y和z計算的值,這將節省大量的計算。 根本不需要圓函數。 你運行循環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
最好將點直接存儲為對象specifiedPoints [key]中的numpy數組,而不是在每個循環中反復收集它們。 這會給你這個代碼:
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
我會看看scipy.spatial.distance
,尤其是cdist
和pdist
方法:
http://docs.scipy.org/doc/scipy/reference/spatial.distance.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.