我制作了一个功能,可以在一个数量级的纬度/经度值上运行。
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数组发生了变化,即使该函数没有返回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然后我没有问题。 e.g。
df = regrid2(lat.copy(),lon.copy())
>>> lat.min()
80.111000000000004
>>> lon.min()
170.11000000000001
我想确定行为的突然变化。我这些天通常在熊猫工作,而不是那么多,所以也许没有改变行为,而是我只是注意到这一点。
Python 2.7,Numpy 1.10.4
答案 0 :(得分:1)
您将可变数据传递给函数,然后对其进行变更。
您可以使用
def regrid2(lats, lons, lat_res=0.25, lon_res=0.25):
lats, lons = np.copy(lats), np.copy(lons)
代替使用副本吗?