我有一些网格化数据(经纬度为180度经纬度的盒子),这里可以下载海冰数据(0 =无冰,1 =完全结冰)。 https://1drv.ms/u/s!ApWaJaYUUERKjqAP-3K48AuUAFgPXQ
我正在尝试计算北极冰的范围,即如果网箱超过15%冰(0.15),则网箱被计为冰覆盖,并且该网格框的区域被添加到阵列中。然后在总结后对总面积求和。我得到的值是16.08,比我需要的要高得多(数据是2014年12月,实际值在这里(ftp://sidads.colorado.edu/DATASETS/NOAA/G02135/north/monthly/data/N_12_extent_v2.1.csv)应该是12.4 ish。
我知道给定分辨率会有差异(例如地形边缘),但不是那么大。
我使用的代码如下:
from netCDF4 import Dataset
import numpy as np
Data = Dataset('Ice.nc','r')
ICE = np.squeeze(np.squeeze(Data.variables['sic'][:]))
Lat = Data.variables['latitude'][:]
Lon = Data.variables['longitude'][:]
Ice_Exten = np.zeros((360,180))
for i in range(0,360):
for j in range(90,180): #just northern hemisphere
if ICE[j,i] > 0.15 and ICE[j,i] <= 1.0:
Ice_Exten[i,j] = 12321. * np.cos(np.radians(Lat[j]))
print np.sum(Ice_Exten)/1e6
非常感谢任何帮助!
答案 0 :(得分:0)
为什么不添加总冰面积而不是将其归结为1?
from netCDF4 import Dataset
import numpy as np
Data = Dataset('Ice.nc','r')
ICE = np.squeeze(np.squeeze(Data.variables['sic'][:]))
Lat = Data.variables['latitude'][:]
Lon = Data.variables['longitude'][:]
Ice_Exten = np.zeros((360,180))
for i in range(0,360):
for j in range(90,180): #just northern hemisphere
if ICE[j,i] > 0.15 and ICE[j,i] <= 1.0:
Ice_Exten[i,j] = 12321. * np.cos(np.radians(j-90.)) * ICE[j,i]
print np.sum(Ice_Exten)/1e6
输出:
12.7085786161
答案 1 :(得分:0)
代码没有问题;相反,差异是由于使用了陆地/海洋掩模和插值。