我目前正在开发一个项目,使用python为海洋模型创建CC和CI。我使用了mpl_toolkits.basemap中的插值。这是我的以下代码:
sal_arr=[]
for k in xrange(len(depth)):
salty=data.variables['salt'][k,:,:]
salt=mp.interp(salty,lon,lat,lon_rho,lat_rho,checkbounds=False,masked=False,order=1)
sal_arr.append(salt)
当我在列表中得到插值数据时,我得到了(部分结果):
masked_array(data =
[[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
...,
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]],
mask =
[[ True True True ..., True True True]
[ True True True ..., True True True]
[ True True True ..., True True True]
...,
[ True True True ..., True True True]
[ True True True ..., True True True]
[ True True True ..., True True True]],
fill_value = -9.99e+33)
但是,当我使用np.asarray函数将其转换为numpy数组时,结果是将数据格式更改为:
array([[[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
...,
[ 35.85155781, 35.82556325, 35.7995687 , ..., 0. ,
0. , 0. ],
[ 35.86569978, 35.84589233, 35.82608487, ..., 0. ,
0. , 0. ],
[ 35.88255757, 35.87000866, 35.85745976, ..., 0. ,
0. , 0. ]]
并且,它恰好在我的插值中产生了一些我无法理解的噪音,因为当我使用列表中的数据绘制它时它是可以的。此外,我试图使用该功能:
np.ma.masked_where
但它没有多大帮助。如果有人能建议我任何其他方向,我会很感激。
谢谢
答案 0 :(得分:0)
屏蔽数组有两个属性,'数据'数组和'掩码'数组。在普通显示中,掩码隐藏数据的选定值,显示“ - ”。在你的情况下,每个元素都被掩盖,所以你所看到的就是。
asarray
操作会删除掩码,并让您查看数据。它就在蒙面数组中,但你只是没有看到它。
你们需要阅读numpy蒙面数组。
至于为什么你有一个蒙面数组,特别是一个掩盖了每个值的数组 - 你将不得不深入研究interp
文档。
http://matplotlib.org/basemap/api/basemap_api.html#mpl_toolkits.basemap.interp
masked:如果为True,则掩盖xin和yin范围之外的点(在掩码数组中)。如果masked设置为数字,则xin和yin范围之外的点将设置为该数字。默认为False。