Я создал функцию, которая работает с множеством значений широты/долготы.Функция Python переопределяет переменные, которые не передаются
from __future__ import division, print_function
import pandas as pd, numpy as np
def regrid2(lats, lons, lat_res=0.25, lon_res=0.25):
# round lat/lon values to nearest decimal degree according to specified
# resolution and reshape the array
lats[lats<=0] = lat_res*(np.round(lats[lats<=0]/lat_res)) - lat_res/2
lats[lats>0] = lat_res*(np.round(lats[lats>0]/lat_res)) + lat_res/2
lons[lons<=0] = lon_res*(np.round(lons[lons<=0]/lon_res)) + lon_res/2
lons[lons>0] = lon_res*(np.round(lons[lons>0]/lon_res)) - lon_res/2
lats = np.reshape(lats, (lats.size,1), order='F')
lons = np.reshape(lons, (lons.size,1), order='F')
lats = 0
df = pd.DataFrame()
return df
lat = np.arange(80.111, 90, 5)
lon = np.arange(170.11, 180,0.33)
df = regrid2(lat,lon)
Когда я называю regrid2 мой Lat/Lon массивы изменить, даже если функция не возвращает новые массивы для широты/долготы.
Е.Г., перед вызовом regrid:
>>> lat.min()
80.111000000000004
>>> lon.min()
170.11000000000001
после вызова regrid:
>>> lat.min()
80.125
>>> lon.min()
169.875
Я не помню, чтобы подобные проблемы раньше. Что особенно странно, так это то, что я запускал один и тот же сценарий прошлой ночью без проблем, но сегодня утром функция переопределяет мои переменные lat/lon. Я снова начал работу с IDE, но я не смог определить, почему это происходит.
Это, если говорить, если я скопирую lat/lon в regrid, то у меня нет проблем. например
df = regrid2(lat.copy(),lon.copy())
>>> lat.min()
80.111000000000004
>>> lon.min()
170.11000000000001
Я хотел бы определить внезапное изменение поведения. Я обычно работаю в Pandas в эти дни, не так много с numpy, так что, возможно, не было изменений в поведении, скорее я просто замечаю это.
Python 2.7, Numpy 1.10.4
ваш код выглядит некорректно 'df = pd.DataFrame() return df' совпадает с вашим рабочим кодом? – EdChum
Вы передаете изменяемое значение функции и затем ее мутируете. Таким образом, массивы с множественными числами всегда изменялись. – kojiro
Ваше название вводит в заблуждение, переменные 'lat' и' lon' определенно пройдены. – IanS