文章目录

  • 掩码数组常用命令
  • 一、掩码数组
  • 1.创建掩码数组
  • 2.生成带掩码的数组
  • 3.对数组中的无效值做掩码处理
  • 二、访问数组掩码
  • 1.函数应用
  • 2.修改掩码



掩码数组常用命令

命令

功能

masked_invalid()

对掩码数组中的无效值做掩码处理

masked_equal(x,value)

将数组x中等于value值的元素设为掩码

masked_greater(x,value)

将数组x中大于value值的元素设为掩码

masked_greater_equal(x,value)

将数组x中大于等于value值的元素设为掩码

masked_less(x,value)

将数组x中小于value值的元素设为掩码

masked_less_equal(x,value)

将数组x中小于等于value值的元素设为掩码

masked_inside(x,a,b)

掩码[a,b]之间的元素,包括a,b

masked_outside(x,a,b)

掩码[a,b]之外的元素,不包括a,b

masked_where()

用一个数组的条件筛选结果对另一个数组做掩码处理

ma.getdata(a)

得到掩码数组的数据视图,即不带掩码的原数组

一、掩码数组

  • numpy.ma子模块通过引入掩码数组提供了一种解决数据确实或无效问题的安全便捷的方法。
  • 掩码数组是指该数组中可能包含某些无效的值或可以指定某些值是无效的。
  • 掩码式数组由一个正常数组与一个布尔式数组组成,若布尔数组中为Ture,则表示正常数组中对应下标的值无效,反之False表示对应正常数组的值有效。
  • 掩码数组具有三个属性:data、mask、fill_value;
  • data表示原始数值数组,mask表示获得掩码用的布尔数组,fill_value表示的填充值替代无效值之后的数组,该数组通过filled()方法查看;

1.创建掩码数组

import numpy as np
a=np.ma.array([1,2,3])
print(a)
print(type(a))
  • 这里创建的a就是一个掩码数组,但此时在数据输出上跟普通的数组没有区别。但所属的类与普通数组不同。
[1 2 3]
<class 'numpy.ma.core.MaskedArray'>

2.生成带掩码的数组

b = np.ma.array([1, 2, 3, 4], mask=[0, 0, 1, 0])
print(b)
  • 此时生成的数组是带掩码的数组,即第三个数据是无效的,输出结果如下:
[1 2 -- 4]

3.对数组中的无效值做掩码处理

a = np.ma.array([1, np.inf, 2, np.nan, 3])
print(a)
[ 1. inf  2. nan  3.]

由输出结果可以看到,在直接生成掩码数组时,并没有对无效值做掩码处理。

a = np.ma.array([1, np.inf, 2, np.nan, 3])
a = np.ma.masked_invalid(a)
print(a)
[1.0 -- 2.0 -- 3.0]

但是使用masked_invalid()命令时可以对掩码数组中的无效值作掩码处理。

二、访问数组掩码

1.函数应用

  • 掩码数组的函数应用与普通数组没有什么区别。如果掩码数组子模块有对应函数应优先使用掩码子模块的对应函数。

2.修改掩码

  • 通过掩码的mask属性可以查看当前数组的掩码情况。通常数组的掩码是一个布尔型数组,或是一个布尔值。
a = np.ma.array([1, 2, 3, 4, 5])
b = np.array(range(5))
c = np.ma.masked_where(b > 3, a)
print(c)
print(c.mask)
[1 2 3 4 --]
[False False False False  True]
  • 如果要对数组切片掩码或者对数组的某个元素掩码,直接令该切片或该元素等于ma.masked常量即可
  • 如果要撤销对数组切片或某个元素的掩码,直接对该元素赋值即可