簡體   English   中英

在Python中,獲取二維最接近整數的最佳方法是什么?

[英]In Python, what's the best way to get the closest integers for two dimensions?

我有一個二維的元組列表,未排序,大小為n 我想找到哪個元組的尺寸最接近X和Y。什么是最好的方法?

target = (75, 75)
values = [
    (38, 61),
    (96, 36),
    (36, 40),
    (99, 83),
    (74, 76),
]

使用targetvalues ,該方法應產生答案(74, 76)

編輯

下面答案將我引導到針對在此登陸的任何人的確切方法:

def distance(item, target):
    return ((item[0] - target[0]) ** 2 + (item[1] - target[1]) ** 2) ** 0.5

best = min(values, key=lambda x: distance(x, target))

這是笛卡爾距離問題。

  1. 首先取測試值x減去最佳x值的平方。
  2. 然后取測試值y的平方減去最佳y值。
  3. 最后,采用步驟1加上步驟2的平方根,即可得出距離。
  4. 將其應用到列表中的所有項目,最低的編號(使用min函數)將最適合您。
def distance(tup1,tup2):
    """
        This question is unanswerable unless you can specify this

        examples for 2d (you can write more general N-dimensional code if you need):
        cartesian: math.sqrt((tup2[0]-tup1[0])**2 + (tup2[1]-tup1[1])**2)
        manhattan: (tup2[0]-tup1[0]) + (tup2[1]-tup1[1])
    """
    return # YOUR CODE HERE

min(values, key=lambda x:distance(target,x))

這只是問題的另一個視角。 由於這是笛卡爾平原的問題,因此將其轉換為復雜的平原並求解

>>> min((abs(complex(*e)-complex(*target)),e) for e in values)[-1]
(74, 76)
closest = min([(abs(val[0]-target[0])+abs(val[1]-target[1]),val) for val in values])[1]

是一種方式。

暫無
暫無

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

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