我有這兩個資料串列x & y。現在我想洗掉(x,y)具有超過特定歐幾里德距離的特定笛卡爾點(示例:4)。怎么做?
x = [92.5 , 92.75 ,92.75, 93. , 93., 93.25 ,93.25, 93.25,
93.25 ,93.25 ,93.25 ,93.25 ,93. , 92.5, 93. , 93. , 93.,
92.5 , 92.75, 93. , 93.25, 93.25 ,93.5 ,93.5 , 93.5 ,93.5 ,
91.5 , 92.5 ,92.5 ,92.5 , 92. , 92., 92. , 91.75 ,91.5 ,
91.5 , 91.25 ,91. , 91.25 ,91.25, 91.25 ,91.]
y = [17.75, 17.75 ,18. , 18. , 18. , 18.25, 18.25 ,18.5,
18.5 , 18.5 , 18.75 ,18.75 ,18.75, 24.75 ,19. , 18.75, 18.75,
18.75 ,18.75 ,18.75 ,19. ,19. , 19.25, 19.5 , 19.5 , 19.75 ,
24.25 ,24.75 ,24.75 ,24.75 ,24.25, 24.25 ,24.25 ,24.25 ,24.75,
24.25 ,23.75, 23.75 ,23.75 ,24.25 ,23.75 ,23.75]
這就是我所做的,但沒有成功。
for k in range(len(x)):
x1 = x[k]
y1 = y[k]
x2 = x[k 1]
y2 = y[k 1]
distance = np.sqrt((x2-x1)**2 (y2-y1)**2)
if distance>4:
x.remove(k)
y.remove(k)
uj5u.com熱心網友回復:
這可以解決你的問題,
import numpy as np
newX, newY = [], []
for k in range(len(x) - 1):
if np.sqrt((x[k 1] - x[k]) ** 2 (y[k 1] - y[k]) ** 2) <= 4:
newX.append(x[k])
newY.append(y[k])
newX:
[92.5, 92.75, 92.75, 93.0, 93.0, 93.25, 93.25, 93.25, 93.25, 93.25, 93.25, 93.25, 93.0, 93.0, 93.0, 92.5, 92.75, 93.0, 93.25, 93.25, 93.5, 93.5, 93.5, 91.5, 92.5, 92.5, 92.5, 92.0, 92.0, 92.0, 91.75, 91.5, 91.5, 91.25, 91.0, 91.25, 91.25, 91.25]
newX:
[17.75, 17.75, 18.0, 18.0, 18.0, 18.25, 18.25, 18.5, 18.5, 18.5, 18.75, 18.75, 19.0, 18.75, 18.75, 18.75, 18.75, 18.75, 19.0, 19.0, 19.25, 19.5, 19.5, 24.25, 24.75, 24.75, 24.75, 24.25, 24.25, 24.25, 24.25, 24.75, 24.25, 23.75, 23.75, 23.75, 24.25, 23.75]
uj5u.com熱心網友回復:
更改運行回圈的串列不是一個好主意。此代碼可能對您有所幫助
x = [92.5 , 92.75 ,92.75, 93. , 93., 93.25 ,93.25, 93.25, 93.25 ,93.25 ,93.25 ,93.25 ,93. , 92.5, 93. , 93. , 93., 92.5 , 92.75, 93. , 93.25, 93.25 ,93.5 ,93.5 , 93.5 ,93.5 , 91.5 , 92.5 ,92.5 ,92.5 , 92. , 92., 92. , 91.75 ,91.5 , 91.5 , 91.25 ,91. , 91.25 ,91.25, 91.25 ,91.]
y = [17.75, 17.75 ,18. , 18. , 18. , 18.25, 18.25 ,18.5, 18.5 , 18.5 , 18.75 ,18.75 ,18.75, 24.75 ,19. , 18.75, 18.75, 18.75 ,18.75 ,18.75 ,19. ,19. , 19.25, 19.5 , 19.5 , 19.75 , 24.25 ,24.75 ,24.75 ,24.75 ,24.25, 24.25 ,24.25 ,24.25 ,24.75, 24.25 ,23.75, 23.75 ,23.75 ,24.25 ,23.75 ,23.75]
x_tmp, y_tmp = [], []
for k in range(len(x)-1): # Till len(x) will give index out of range error
x1, x2, y1, y2 = x[k], x[k 1], y[k], y[k 1]
distance = np.sqrt((x2-x1)**2 (y2-y1)**2)
if distance<=4:
x_tmp.append(x[k])
y_tmp.append(y[k])
print(x_tmp, y_tmp)
另外,你在哪里定義了'i'。
uj5u.com熱心網友回復:
更快、更簡潔的解決方案:
dists = np.sqrt(np.diff(x)**2 np.diff(y)**2)
mask = np.nonzero(dists <= 4)[0]
new_x = x[mask]
new_y = y[mask]
對于這一點,你就需要你的串列首先轉換為numpy的陣列:x = np.array(x)。
此解決方案等效于該執行緒中提供的其他解決方案。
uj5u.com熱心網友回復:
您可以zip x和y以及這兩個的一個移位串列并迭代這個壓縮物件。對于測驗,不是使用外部庫求平方根,而是對每個數字進行平方。這個解決方案可能是這里最快的一個,包括 numpy 解決方案。
new_x, new_y = [], []
for x1,x2,y1,y2 in zip(x,x[1:],y,y[1:]):
if (x2 - x1) *(x2 - x1) (y2 - y1) *(y2 - y1) <= 4 *4:
new_x.append(x1)
new_y.append(y1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/384824.html
