从给定的嵌套列表中获取最近的嵌套列表

get the nearest nested list from a given nested list

提问人:Tallion 22 提问时间:10/26/2022 最后编辑:wjandreaTallion 22 更新时间:10/26/2022 访问量:49

问:

所以我有一个 2 个值和一个多个嵌套值的列表,例如[-82.819309,40.081296]

[[-83.0347849999999, 39.945993],
 [-82.957851, 40.060118],
 [-82.994303, 40.013227],
 [-82.8265609999999, 39.9207779999999],
 [-82.9984709999999, 39.887616],
 ...]

现在我想从嵌套列表中获取列表,其与两个值的差异最小。 类似的东西

>>> getmin([1,2], [[1,1],[1,4],[2,3],[3,2]]) 
[1,1]

逻辑:

[1,2] - [1,1] = abs(1-1) + abs(2-1) -> 1
[1,2] - [1,4] = abs(1-1) + abs(2-4) -> 2
[1,2] - [2,3] = abs(1-2) + abs(2-3) -> 2
[1,2] - [3,2] = abs(1-3) + abs(2-2) -> 2

有没有办法做到这一点?

Python 列表 嵌套 嵌套列表

评论

2赞 Michael Butscher 10/26/2022
首先,您必须准确定义如何计算此差异以产生单个数字。然后,您应该在问题中以格式正确的文本显示自己的努力(代码)。
0赞 craigb 10/26/2022
请考虑使用 .将向量乘以以生成与匹配值大小相同的矩阵。减去它们。然后用于计算行的范数(您可以根据要被视为“最接近”的范数指定要使用的范数类型)并找到最小范数的索引。numpynp.onesnp.normnp.argmin
0赞 Tallion 22 10/26/2022
我已经更新了问题,希望如何计算最小值。@MichaelButscher
0赞 Michael Sohnen 10/26/2022
@Tallion 22 我在网上找不到任何地方。我知道你可以用.要获取指定的指标(称为“cityblock”指标),请使用 kwarg 。numpy.normnumpy.linalg.normord=1
0赞 craigb 10/26/2022
@Michael Sohnen - 感谢您纠正我的错别字。

答:

2赞 Michael Sohnen 10/26/2022 #1

您可以使用非常简单的代码:

import numpy as np

mylist = [[-83.0347849999999, 39.945993],
 [-82.957851, 40.060118],
 [-82.994303, 40.013227],
 [-82.8265609999999, 39.9207779999999],
 [-82.9984709999999, 39.887616],
 ...]

def item_of_min_norm(target_coordinate):
    norms  = [np.linalg.norm(np.array(target_coordinate,float)-np.array(item,float), ord=1) for item in mylist]
    index_of_minimum = np.argmin(norms)
    minimum_item = mylist[index_of_minimum]
    return minimum_item


# Use the new function
closest_to_1_1 = item_of_min_norm([1.0,1.0])

但是,如果我能正确猜测您的用例,您可能希望使用 KDTree。 请参阅 https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KDTree.html