Numpy掩码数组masked arrays,这一篇就够了

  • 1. 什么是掩码数组
  • 2.示例
    • 2.1 一个例子走进掩码数组
    • 2.2 创建一个数组第二个值是无效的
    • 2.3 创建一个数组所有靠近1.e20的值是无效的
    • 2.4 只获取有效项
    • 2.5 取消标识无效(注意标识硬编码的需要先软化在标识)
    • 2.6 修改Masked Array标记项为无效项
  • 参考
  • MaskedArray是numpy.ndarray的一个子类,因此它继承了索引和切片机制。

1. 什么是掩码数组

掩码数组是包括可能缺少或无效项的数组。numpy.ma模块为numpy提供了一个几乎可以替代numpy的替代品,它支持带掩码的数据数组。

数组计算时,数据集可能是不完整的或者由于存在无效数据而使得计算结果是被污染的。 例如,传感器可能无法记录数据,或记录了无效值。ma模块通过引入屏蔽数组,提供了一种解决此问题的方便方法。

掩码数组是标准numpy.ndarray和掩码的组合。掩码可以是nomask,表示关联数组的值无效,也可以是boolean数组,用于确定关联数组的每个元素的值是否有效。 当掩码的某个元素为False时,关联数组的相应元素有效,并被称为未掩码。当掩码的一个元素为真时,关联数组的相应元素被称为掩码(无效)。
该包确保在计算中不使用屏蔽项。

2.示例

概念有点抽象,看一个例子感受一下:

2.1 一个例子走进掩码数组

掩码数组可以帮助进行numpy的相应运算而忽略无效值

# 掩码数组可以帮助进行numpy的相应运算而忽略无效值
import numpy as np
import numpy.ma as max = np.array([1, 2, 3, -1, 5])# 假设上述数组x中第4个值是无效的,那么可以建立一个掩码数组如下mx
mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0])# 接下来就可以忽略无效数据,而计算数据集x的平均值了
print(mx.mean())
# 得到结果2.75

ma模块的主要特性是MaskedArray类,它是numpy.ndarray的一个子类。
numpy.ma模块可用作numpy的附加模块;

2.2 创建一个数组第二个值是无效的

import numpy.ma as ma
# 创建一个数组第二个值是无效的
y = ma.array([1, 2, 3], mask = [0, 1, 0])

2.3 创建一个数组所有靠近1.e20的值是无效的

import numpy.ma as ma
# 创建一个数组所有靠近1.e20的值是无效的
z = ma.masked_values([1.0, 1.e20, 3.0, 4.0], 1.e20)

2.4 只获取有效项

import numpy.ma as ma# 只获取有效项法一
x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
print(x[~x.mask])
# masked_array(data=[1, 4],
#              mask=[False, False],
#              fill_value=999999)# 只获取有效项法2
print(x.compressed())
# array([1, 4])

2.5 取消标识无效(注意标识硬编码的需要先软化在标识)

import numpy.ma as ma# 取消标识项无效
x = ma.array([1, 2, 3], mask=[0, 0, 1])
print(x)
# masked_array(data=[1, 2, --],
#              mask=[False, False, True],
#              fill_value=999999)
x[-1] = 5
print(x)
# masked_array(data=[1, 2, 5],
#              mask=[False, False, False],
#              fill_value=999999)x = ma.array([1, 2, 3], mask=[0, 0, 1], hard_mask=True)
print(x)
# masked_array(data=[1, 2, --],
#              mask=[False, False, True],
#              fill_value=999999)
x[-1] = 5
print(x)
# masked_array(data=[1, 2, --],
#              mask=[False, False, True],
#              fill_value=999999)
print(x.soften_mask())
# masked_array(data=[1, 2, --],
#              mask=[False, False, True],
#              fill_value=999999)
x[-1] = 5
print(x)
# masked_array(data=[1, 2, 5],
#              mask=[False, False, False],
#              fill_value=999999)
print(x.harden_mask())
# masked_array(data=[1, 2, 5],
#              mask=[False, False, False],
#              fill_value=999999)# 硬编码的需要先软化才可以标识取消无效
x = ma.array([1, 2, 3], mask=[0, 0, 1])
print(x)
# masked_array(data=[1, 2, --],
#              mask=[False, False,  True],
#              fill_value=999999)
x.mask = ma.nomask
print(x)
# masked_array(data=[1, 2, 3],
#              mask=[False, False, False],
#              fill_value=999999)

2.6 修改Masked Array标记项为无效项

import numpy.ma as ma# 修改Masked Array标记项为无效项
x = ma.array([1, 2, 3])
x[0] = ma.masked
print(x)
# masked_array(data=[--, 2, 3],
#              mask=[ True, False, False],
#              fill_value=999999)
y = ma.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
y[(0, 1, 2), (1, 2, 0)] = ma.masked
print(y)
# masked_array(
#     data=[[1, --, 3],
#           [4, 5, --],
#           [--, 8, 9]],
#     mask=[[False,  True, False],
#           [False, False,  True],
#           [ True, False, False]],
#     fill_value=999999)
z = ma.array([1, 2, 3, 4])
z[:-2] = ma.masked
print(z)
# masked_array(data=[--, --, 3, 4],
#              mask=[ True,  True, False, False],
#              fill_value=999999)

参考

  • https://numpy.org/doc/stable/reference/maskedarray.html

Numpy掩码数组masked arrays,这一篇就够了相关推荐

  1. Java 数组,看这一篇就够了

    在 Java 泛型出现之前,只有数组可以用来存储指定类型的对象:在自动装箱机制出现之前,只有数组可以用来存储基本数据类型:也就是说,在泛型和自动装箱机制出现之前,数组在 Java 当中的分量举足轻重. ...

  2. Numpy统计计算、数组比较,看这篇就够了

    导读:工欲善其事,必先利其器.此前,我们在<玩数据必备Python库:Numpy使用详解>一文中介绍了利用Numpy进行矩阵运算的方法,本文继续介绍Numpy的统计计算及其他科学运算的方法 ...

  3. array用法 numpy_Numpy统计计算、数组比较,看这篇就够了

    导读:工欲善其事,必先利其器.此前,我们在<玩数据必备Python库:Numpy使用详解>一文中介绍了利用Numpy进行矩阵运算的方法,本文继续介绍Numpy的统计计算及其他科学运算的方法 ...

  4. 从numpy掩码到pytorch掩码

    一.numpy布尔索引掩码 import numpy as npdata = np.arange(1, 11) mask=[True,False,True,False,True,False,True, ...

  5. python笔记之NUMPY中的掩码数组numpy.ma.mask

    python科学计算_numpy_线性代数/掩码数组/内存映射数组 1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行: ...

  6. NumPy Cookbook 带注释源码 六、NumPy 特殊数组与通用函数

    # 来源:NumPy Cookbook 2e ch6 创建通用函数 from __future__ import print_function import numpy as np# 我们需要定义对单 ...

  7. python中input数组_python-numpy.interp和掩码数组

    我正在使用一个numpy蒙版数组来执行一些图像处理.设置了遮罩可处理围绕图像的NoData像素(必要边界,因为这些是地图投影图像,其原点位于无数据像素中). 使用以下代码块,我可以对图像执行高斯拉伸. ...

  8. [转载] python numpy 子数组_Python学习笔记3:Numpy入门

    参考链接: Python中的numpy.logaddexp2 参考<Python:数据科学手册>一书,仅作个人学习及记录使用,若有侵权,请联系后台删除. 1 理解Python中的数据类型 ...

  9. numpy 数组 ::_看起来不错,没有麻烦:使用NumPy进行数组编程

    numpy 数组 :: It is sometimes said that Python, compared to low-level languages such as C++, improves ...

最新文章

  1. linux cuda 如何编译器,linux – Cuda编译器不使用GCC 4.5
  2. python爬取pdf内容_Python爬取读者并制作成PDF
  3. 瑞幸咖啡百万大咖活动 记人生第一次豪赌,净赔了200元钱。
  4. Java初学者都应该搞懂的六个问题
  5. 请允许我悄悄的爱你一次好吗 zz
  6. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...
  7. Learn python the seventh day
  8. Python Django 打印执行过的查询语句
  9. android 抛出异常,android - android Build.GetSerial()抛出异常 - 堆栈内存溢出
  10. boost::hana::take_back用法的测试程序
  11. 请举出OSI七层模型在实际应用中的实例
  12. hadoop调优之一:概述
  13. 设置Eclipse智能提示
  14. 加载文件流_jvm类加载的过程
  15. 【转】mip-semi-fixed 走走又停停
  16. SpringSecurity实现记住我功能
  17. FineReport的公式编辑框的语法简介
  18. and/or(||)的理解
  19. MySQL查询语句(select)详解(1)
  20. 记一段随风而逝的感情

热门文章

  1. YOLOv4实用训练实践
  2. Android中出现内存泄露的原因
  3. Libzip 版本过低或提示reinstall解决方法
  4. git命令合并分支代码
  5. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解
  6. java线程安全总结 - 1 (转载)
  7. 调用bat文件执行java文件
  8. JVM系列(之ClassLoader)
  9. 12,缓冲运动。匀速运动停止条件
  10. c#正则表达式使用详解