2017-08-14 75 views
1

我正在使用python 3.6将降水数据映射到一个大陆上。问题是我所拥有的数据的经度值从0到360,我需要将数据从-180增加到180才能映射它。我需要创建一个循环来说明经度是> 180,然后是新经度=经度-360。 关于我的数据:我想循环56年。 X是在那里我有我所有的经度值存储Python:如何创建一个循环来更改经度数据

这是我到目前为止有:

lon=[] 
for n in range(0,56): 
    lon=x[n] 
    if lon > 180: 
     lon=lon-360 
np.save('filename',lon) 

这是否正确?有没有与我的问题类似的例子?谢谢!

+1

你永远不存储'lon'回阵列。 –

+0

注意到你附加'numpy',然后使用'np.where'? – Wen

+0

我是python的新手。我将如何做到这一点? @EugeneSh。 – CPG

回答

3

检查:通过使用np.where

x=[100,200,400,500,100,181,179] 
lon=[] 
for n in x: 
    if n > 180: 
     lon.append(n-360) 
    else: 
     lon.append(n) 

x=np.asarray(x) 
np.where(x >180,x-360,x) 
2

我会使用numpy的作为@Wen已经推荐:

In [16]: lon = np.array([100,200,400,500,100,181,179]) 

In [17]: lon 
Out[17]: array([100, 200, 400, 500, 100, 181, 179]) 

In [18]: lon = np.where(lon > 180, lon-360, lon) 

In [19]: lon 
Out[19]: array([ 100, -160, 40, 140, 100, -179, 179]) 

或者我们能够做到这方式:

In [30]: lon[lon>180] -= 360 

In [31]: lon 
Out[31]: array([ 100, -160, 40, 140, 100, -179, 179]) 
1

你可以试试:

x=[100,200,400,500,100,181,179] 
lon = [y if (y <= 180) else (y - 360) for y in x ] 
相关问题