2015-12-30 3 views
1

Я использую linspace NumPy для заполнения данных между точками.Получение numpy Linspace сгенерированные координаты

lats = (-66.44421,-66.57947,-64.81464,-64.69528) 
lons = (-73.03290,-72.73904,-64.71657,-65.03036) 
NO3 = (33.48,24.01,17.20,20.03) 

xi = np.linspace(min(lats),max(lats),360) 
yi = np.linspace(min(lons),max(lons),360) 

# grid the data. 
zi = griddata((lats, lons), NO3, (xi[None,:], yi[:,None]), method='cubic') 
# contour the gridded data. 
plt.contourf(xi,yi,zi,15,cmap=cMap) 
plt.colorbar() 
# plot data points. 
plt.scatter(lats,lons,facecolors='none', edgecolors='k',s=26) 
plt.show() 

Я хочу, чтобы получить значение (отсутствующие образцы) из решетчатого цзы данных на основе пары координат, полученную от LINSPACE, но координаты не точны для Dict поиска:

# record index and value of linspace coordinates as key and value 
xi_coords = {value: index for index, value in enumerate(xi)} 
yi_coords = {value: index for index, value in enumerate(yi)} 
# how to retrieve a value inbetween at say... (-65.11018,-67.08512) 
zi[xi_coords[-65.11018], yi_coords[-67.08512]] 

Возвращает Ключевая ошибка. Существует ли более разумное решение этой проблемы?

ответ

0

Один вариант - округление. Например, до двух десятичных знаков:

xi_coords = {round(value, 2): index for index, value in enumerate(xi)} 
yi_coords = {round(value, 2): index for index, value in enumerate(yi)} 
zi[xi_coords[-65.11], yi_coords[-67.08]] 
+0

Еще раз спасибо Майк, работает над проблемой, которую у меня есть! –

0

Если я не ошибаюсь, то, что вы пытаетесь получить, не находится в вашем linspace, это не просто проблема с числовой точностью ... Если вы хотите найти ближайшую точку сетки к любой заданной точке, вы должны определить функции, а не использование dicts:

latmin = min(lats) 
latmax = max(lats) 
npoints = 360 

def get_lat_index(lat): 
    return int(round((npoints-1)*(lat-latmin)/(latmax-latmin))) 

и аналогичные для долготы.

Смежные вопросы