簡體   English   中英

使用python中的內置函數查找3d距離

[英]Finding 3d distances using an inbuilt function in python

我有 6 個列表存儲兩組位置的 x、y、z 坐標(每組 3 個列表)。 我想計算兩組中每個點之間的距離。 我已經編寫了自己的距離函數,但速度很慢。 我的一個列表有大約 100 萬個條目。 我試過 cdist,但它會產生一個距離矩陣,我不明白它是什么意思。 是否有另一個內置函數可以做到這一點?

如果可能,請使用numpy模塊來處理此類事情。 它比使用常規的 python 列表要高效得多。

我正在這樣解釋你的問題

  1. 你有兩組點
  2. 兩組的點數相同( N
  3. 集合 1 中的點k與集合 2 中的點k相關。如果每個點都是某個對象的坐標,我將其解釋為包含初始點的集合 1,並在其他時間 t 設置點 2。
  4. 您想找到距離d(k) = dist(p1(k), p2(k)) ,其中p1(k)是集合 1 中的點號k ,而p2(k)是集合 2 中的點號k

假設您的 6 個列表分別是x1_coordsy1_coordsz1_coordsx2_coordsy2_coordsz2_coords ,那么您可以像這樣計算距離

import numpy as np
p1 = np.array([x1_coords, y1_coords, z1_coords])
p2 = np.array([x2_coords, y2_coords, z2_coords])

squared_dist = np.sum((p1-p2)**2, axis=0)
dist = np.sqrt(squared_dist)

p1(k)p2(k)之間的距離現在作為dist[k]存儲在 numpy 數組中。

至於速度:在我的帶有“Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz”的筆記本電腦上,計算 N=1E6 的兩組點之間的距離的時間是 45 毫秒。

盡管此解決方案使用numpynp.linalg.norm可能是另一種解決方案。

假設您有一個點p0 = np.array([1,2,3])和第二個點p1 = np.array([4,5,6]) 那么找到兩者之間距離的最快方法是:

dist = np.linalg.norm(p0 - p1)
# Use the distance function in Cartesian 3D space:
# Example
import math     
def distance(x1, y1, z1, x2, y2, z2):
d = 0.0
d = math.sqrt((x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2)
return d

您可以使用math.dist(A, B) ,其中 A 和 B 是坐標數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM