![](/img/trans.png)
[英]Finding a power spectrum in Python, without using the inbuilt FFT function
[英]Finding 3d distances using an inbuilt function in python
我有 6 個列表存儲兩組位置的 x、y、z 坐標(每組 3 個列表)。 我想計算兩組中每個點之間的距離。 我已經編寫了自己的距離函數,但速度很慢。 我的一個列表有大約 100 萬個條目。 我試過 cdist,但它會產生一個距離矩陣,我不明白它是什么意思。 是否有另一個內置函數可以做到這一點?
如果可能,請使用numpy
模塊來處理此類事情。 它比使用常規的 python 列表要高效得多。
我正在這樣解釋你的問題
N
)k
與集合 2 中的點k
相關。如果每個點都是某個對象的坐標,我將其解釋為包含初始點的集合 1,並在其他時間 t 設置點 2。d(k) = dist(p1(k), p2(k))
,其中p1(k)
是集合 1 中的點號k
,而p2(k)
是集合 2 中的點號k
。 假設您的 6 個列表分別是x1_coords
、 y1_coords
、 z1_coords
和x2_coords
、 y2_coords
、 z2_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 毫秒。
盡管此解決方案使用numpy
, np.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.