【问题标题】:Find 2 nearest values in 2 arrays matching the x,y coordinates在匹配 x,y 坐标的 2 个数组中找到 2 个最接近的值
【发布时间】:2015-09-08 14:30:07
【问题描述】:

我必须在 python 的 2 个数组中找到 2 个不同的值。它不会给我这样的问题,但 2 个值必须在相同的 x,y 坐标中,我不知道如何处理。

例如:我必须在第一个数组中找到最接近的数字 5,在第二个数组中找到最接近的数字 87,但 x 和 y 必须具有相同的值。

目前,我已经计算了每个数组的两个 x 和 y 值的平均值。但结果根本不准确。

你有什么想法可以解决这个问题吗?

编辑: 有我的代码:

#This is two arrays that I extract from a file. It contains a lot of values corresponding to latitude and longitude on a earth's photograph.

latitude = data.get_band('latitude').read_as_array(width, height, 0, 0)
longitude = data.get_band('longitude').read_as_array(width, height, 0, 0)
idx = (np.abs(latitude-lat0)).argmin()
nearest_lat = latitude.flat[idx]
idx_lat = np.unravel_index(idx, latitude.shape)
idx = (np.abs(longitude-lon0)).argmin()
nearest_lon =  longitude.flat[idx]
idx_lon = np.unravel_index(idx, longitude.shape)

编辑 2: 最后,我使用了另一种方法:

            latitude = data.get_band('latitude').read_as_array(width, height, 0, 0)
        longitude = data.get_band('longitude').read_as_array(width, height, 0, 0)
        dist = (latitude - lat0)**2 + (longitude - lon0)**2
        idx = np.argmin(dist)
        idx = np.unravel_index(idx, latitude.shape)
        PIXELCOL = idx[0]
        PIXELROWS = idx[1]

感谢大家的帮助!

【问题讨论】:

  • 我不明白你所说的“这两个值必须在同一个 x,y 坐标中”是什么意思
  • 欢迎来到 StackOverflow。要改进您的chances to get useful answers,请show us your code
  • x,y和这两个数组以及两个不同的数字有什么关系?!!
  • 我有两个数组和两个代表地理坐标的不同数字。一个值代表一个像素。我必须从用户输入的像素中选择一个值最接近的像素

标签: python arrays


【解决方案1】:

如果我对您的理解正确,您可以 zip latitudelongitude 列表,为您提供坐标元组。然后找到那些w.r.t的min。到您的参考坐标的欧几里得距离。

>>> lat0, lon0 = 23, 42
>>> latitude = [random.randint(0, 100) for i in range(50)]
>>> longitude = [random.randint(0, 100) for i in range(50)]
>>> min(zip(latitude, longitude), key=lambda t: (t[0]-lat0)**2 + (t[1]-lon0)**2)
(21, 38)

或者,如果您还需要索引(xy 相同,请使用 enumerate

>>> min(enumerate(zip(latitude, longitude)), key=lambda t: (t[1][0]-lat0)**2 + (t[1][1]-lon0)**2)
(13, (21, 38))

一些注意事项:

  • 其实Euclidian distance也涉及到平方根,只是为了找到最近的坐标,不需要计算;如果x 是最小的,那么sqrt(x) 也是最小的
  • 如 cmets 所述,使用欧几里得距离并不完全正确,因为地球是一个球体。但是,对于相距不超过数千英里的位置、两极、日期变更线周围或 R'lyeh 中的位置,它应该是一个足够好的近似值。如果是这种情况,您可以使用更复杂的Great-circle distance

【讨论】:

  • 为什么是欧几里得距离?为什么不是测地线距离? OP需要告诉我们他在寻找什么。 (另外,你得到了欧几里得距离的平方。)
  • @saulspatz 好吧,我只是根据“经度”和“纬度”猜测距离度量。关于平方根:求最小值不需要,所以我省略了。
  • 我的意思是欧几里得距离不适用于计算球体上两点之间的距离,除非它们非常接近。欧几里得距离可用于找出哪两个点最近,但不能确定它们之间的距离。
  • @saulspatz 当然,这是真的,但是(1)不需要实际距离,只是最接近的距离,(2)我假设这些点相当接近,而不是在两极,和(3),让OP找出一些东西。 ;-)
  • 好的。我无法确定 OP 真正想要计算什么,所以我没有什么要补充的了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2016-10-26
  • 2019-01-12
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多