掩码数组(np.ma.array)的应用实例


Mask, 翻译过来就是面具,面罩。在实际的科学计算中,可以使用Mask遮挡掉某些不符合条件的数据,使其不参与后续运算。

1 创建mask数组
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

#调用ma数组库
from numpy import ma

#创建x1数组,1~10内的随机整数数组
seed = np.random.seed(seed = 42)
x1 = np.random.randint(1,10,(1,30))
print('x1:',x1)

#mask遮挡掉数值 > 7和 < 2 的数据;
#生成一个和x1维度一样的布尔数组;遮掩位置用False表示,非遮掩位置用True表示 
mask1 = x1 > 7
mask2 = x1 < 2
mask = mask1 + mask2  #确定mask
mask_x1 = ma.array(x1, mask = mask)
print('mask_x1:',mask_x1)
print('mask_x1 mask:',mask_x1.mask)

'''
Output:

x1: [[7 4 8 5 7 3 7 8 5 4 8 8 3 6 5 2 8 6 2 5 1 6 9 1 3 7 4 9 3 5]]
mask_x1: [[7 4 -- 5 7 3 7 -- 5 4 -- -- 3 6 5 2 -- 6 2 5 -- 6 -- -- 3 7 4 -- 3 5]]
mask_x1 mask: [[False False  True False False False False  True False False  True  True
  False False False False  True False False False  True False  True  True
  False False False  True False False]]
   
'''
2 mask数组数值运算

对应mask的False位置上mask_x1数据不参与数值运算

##数值计算
print()
print('计算平均值')
print('x1 mean:', x1.mean())
print('mask_x1 mean:',mask_x1.mean())

print()
print('得到最小值')
print('x1 min:', x1.min())
print('mask_x1 min:',mask_x1.min())

'''
outputs:

计算平均值
x1 mean: 5.3
mask_x1 mean: 4.714285714285714

得到最小值
x1 min: 1
mask_x1 min: 2
'''
3 更换mask
##重新设置mask :只遮挡大于7的数据
mask_x1.mask = mask1
print()
print('mask_x1:',mask_x1)
print('mask_x1 mask:',mask_x1.mask)

'''
outputs:

mask_x1: [[7 4 -- 5 7 3 7 -- 5 4 -- -- 3 6 5 2 -- 6 2 5 1 6 -- 1 3 7 4 -- 3 5]]
mask_x1 mask: [[False False  True False False False False  True False False  True  True
  False False False False  True False False False False False  True False
  False False False  True False False]]
'''
4 mask数组画图比较
fig1,(ax1,ax2,ax3) = plt.subplots(1,3,figsize = (18,5))

seed = np.random.seed(seed = 42)
x1 = np.random.randint(1,10,(1,30))
ax1.plot(x1[0,:],'-*')
ax1.set_ylim([0,10])
ax1.set_title('No mask')


mask1 = x1 > 7
mask2 = x1 < 2
mask = mask1 + mask2
mask_x1 = ma.array(x1, mask = mask)
ax2.plot(mask_x1[0,:],'-*')
ax2.set_ylim([0,10])
ax2.set_title('mask > 7 and mask < 2 ')

##重新设置mask
mask_x1.mask = mask1
ax3.plot(mask_x1[0,:],'-*')
ax3.set_ylim([0,10])
ax3.set_title('mask > 7')

在这里插入图片描述

如图所示,设置了mask后,即使在画图时,也会遮挡掉mask为False处的位置。

5 ma.array 和 np.array 方法基本一致
#ma.array 和 np.array所具有的方法基本一样,因此使用起来非常方便;
#查看方法:
print('ma.array method:',mask_x1.__dir__())
print('np.array method:',x1.__dir__())

#eg 
print('mask_x1.shape:',mask_x1.shape)
print('x1.shape:',x1.shape)

'''
outputs:

mask_x1.shape: (1, 30)
x1.shape: (1, 30)
'''

参考链接:

官网numpy.ma

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值