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)
'''
参考链接: