我有這樣的二維陣列
arry = [[6,5,7,8],[2,5,5,6]]
前兩個值是 x,y 是圖中的點。我想要基于我給搜索點的排序陣列。所以,如果我給 [3,5] 因為這接近于 [2,5] 我需要得到 [[2,5,5,6],[6,5,7,8]]
提前致謝 !
另一個例子
[[6, 6, 8, 10], [3, 3, 8, 10], [15, 15, 8, 10]]
如果我給 [16,16],我們應該得到
[[15, 15, 8, 10], [6, 6, 8, 10], [3, 3, 8, 10]]
uj5u.com熱心網友回復:
IIUC 您想根據與參考串列的最小差異對子串列進行排序。
你可以使用sorted它的key引數。
如果您需要按點的順序取最小差異:
sorted(l, key=lambda e: [abs(a-b) for a,b in zip(e, [2,5])])
輸出: [[2, 5, 5, 6], [6, 5, 7, 8]]
如果您想要歐幾里得距離(從幾何角度來看更有意義,因為這是點之間直線的長度),您需要求平方差之和:
sorted(l, key=lambda e: sum((a-b)**2 for a,b in zip(e, [2,5])))
輸出: [[2, 5, 5, 6], [6, 5, 7, 8]]
注意。我不是在這里計算平方根是平方,它們的根順序相同
NB2。如果你想讓思考多維,只需在 中添加更多值zip,例如:zip(e, [2,5,4])
uj5u.com熱心網友回復:
使用串列理解來獲得距離(我在這里使用歐幾里得距離):
data = [[6,5,7,8],[2,5,5,6]]
query = [3,5]
distances = [pow(sample[0]-query[0],2) pow(sample[1]-query[1],2) for sample in data]
# No need to calculate roots i.e actual distance as you just need to compare
然后,您可以使用以下方法按距離對資料進行排序:
sorted_data = [x for _, x in sorted(zip(distances, data))]
這樣做你得到sorted_data = [[2, 5, 5, 6], [6, 5, 7, 8]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322332.html
上一篇:我的140個元素串列只列印第一個
