我做了一個函數,在一個numpy的緯度/經度值數組上運行。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時,即使該函數沒有爲緯度/經度返回新數組,我的緯度/經度數組也會改變。
例如呼叫REGRID前:
>>> lat.min()
80.111000000000004
>>> lon.min()
170.11000000000001
調用REGRID AFTER:
>>> lat.min()
80.125
>>> lon.min()
169.875
我不記得以前有類似的問題。特別奇怪的是,我昨晚沒有任何問題地運行相同的腳本,但今天早上該函數正在重新定義我的經緯度變量。我重新啓動了我的IDE,但我無法確定爲什麼會發生這種情況。
這就是說,如果我把經緯度複製到regrid然後我沒有問題。例如
df = regrid2(lat.copy(),lon.copy())
>>> lat.min()
80.111000000000004
>>> lon.min()
170.11000000000001
我想確定行爲的突然變化。我現在通常在熊貓工作,而不是那麼忙碌,所以也許行爲沒有改變,而我只是注意到了這一點。
的Python 2.7,numpy的1.10.4
您的代碼看起來不正確df = pd.DataFrame() return df'與您的工作代碼相同嗎? – EdChum
您正將一個可變值傳遞給一個函數,然後對其進行變異。 Numpy數組一直以這種方式變化。 – kojiro
您的標題具有誤導性,變量'lat'和'lon'肯定會通過。 – IanS