亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python中的三邊測量

python中的三邊測量

江戶川亂折騰 2021-06-01 20:18:06
我正在研究定位系統。我的輸入是一個字典,它會給我們從點(x1,y1)等半徑為 d1 的圓。我想要的輸出是一個數組(類似于二維坐標系),其中相交區域標記為 1,其余為 0。我試過這個:xsize=3000ysize=2000lis={(x1,y1):d1,(x2,y2):d2,(x3,y3):d3}array=np.zeros((xsize,ysize))for i in range(xsize-1):    for j in range(ysize-1):        for element in lis:            if distance((i,j),element)<=(lis[element]):                array[i][j]=1            else:                array[i][j]=0                breakdef distance(p1,p2):    return math.sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2)唯一的問題是數組很大并且花費的時間太長(循環數為 1000 萬次),尤其是在樹莓派上,否則會起作用。有沒有辦法使用openCV和圖像來做,然后畫圓圈來更快地獲得相交區域?它必須是 python 2.x。
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

由于您已經在使用 numpy,請嘗試以矢量化方式重寫您的操作,而不是使用循環。


# choose appropriate dtype for better perf

dtype = np.float32


# take all indices in an array

indices = np.indices((ysize, xsize), dtype=dtype).T

points = np.array(list(lis.keys()), dtype=dtype)


# squared distance from all indices to all points

dist = (indices[..., np.newaxis] - points.T) ** 2

dist = dist.sum(axis=-2)


# squared circle radii

dist_thresh = np.array(list(lis.values()), dtype=dtype) ** 2


intersect = np.all(dist <= dist_thresh, axis=-1)

在我的機器上,這比 for 循環版本快 60 倍左右。


它仍然是一個蠻力版本,可能對所有坐標進行許多不必要的計算。問題中沒有給出圓圈,因此很難對它們進行推理。如果它們覆蓋的區域相對較小,那么如果考慮較小的區域,問題的解決速度會快得多(仍然是計算上的,而不是分析上的)。例如,代替測試所有坐標,可以使用圓的邊界框的交點,這可以顯著減少計算負載。


查看完整回答
反對 回復 2021-06-06
  • 2 回答
  • 0 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號