我必须在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]
谢谢大家的帮助!
答案 0 :(得分:0)
如果我理解正确,您可以zip
latitude
和longitude
列表,为您提供坐标元组。然后找到那些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)
或者,如果您还需要索引(对于x
和y
也是如此,请使用enumerate
:
>>> min(enumerate(zip(latitude, longitude)), key=lambda t: (t[1][0]-lat0)**2 + (t[1][1]-lon0)**2)
(13, (21, 38))
一些注意事项:
x
最小,sqrt(x)