如何在numpy数组中转换3D列表而不会丢失其属性

时间:2016-05-10 00:03:11

标签: arrays list python-2.7 numpy

我目前正在开发一个项目,使用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

但它没有多大帮助。如果有人能建议我任何其他方向,我会很感激。

谢谢

1 个答案:

答案 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。