Python函数重新定义未传递的变量

2024-09-30 08:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个函数,它对纬度/经度值的numpy数组进行操作。你知道吗

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


Tags: 函数numpydfnpres数组minlon
1条回答
网友
1楼 · 发布于 2024-09-30 08:25:22

将可变数据传递给函数,然后对其进行变异。你知道吗

你可以用

def regrid2(lats, lons, lat_res=0.25, lon_res=0.25):
    lats, lons = np.copy(lats), np.copy(lons)

用拷贝代替?你知道吗

相关问题 更多 >

    热门问题