python 处理SMAP_level2c数据进行质量控制

  • 一、二进制与十进制
    • 二、位运算符
      • 三、如何进行位运算

最近在处理SMAP_level2c_sss数据时,再进行偏差估计时发现数据存在问题,根据卫星图像对比,发现在数据筛选之前未进行质量控制,因此有较大的问题。再次,进行一定的总结:

一、二进制与十进制

在此之前,先让我们简单了解一下基础知识吧~

什么是二进制?

二进制是计算机中广泛采用的一种算法。二进制数据是用0和1两个数码来表示的数,所以显示出来的数只有0、1。进位规则是“逢二进一”。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用1来表示“开”,0来表示“关”。
计算机内部表示数的字节单位是定长的,如8位,16位,或32位。
八位就是:0000 0000
其他类推
假如按照4位二进制的数进行转换,先看一张表格对比一下:
不难看出其规律:按照从右向左排序的方式,十进制转为二进制时依次为

举个栗子,

所以转换后就应该是:0101

这样说是不是一下子就明白了呐~~

还是不理解的自己上网看看视频就行啦~~

二、位运算符

在python中,位运算按照数据在内存中的二进制位(Bit)进行操作,同时, 位运算符只能用来操作整数类型,按照整数在内存中的二进制形式进行计算。具体的位运算符如下表所示:
简单来说,将两个十进制数进行比较,假如有4位二进制数
0000

a&b的意思是:a、b中对应的二进制位数进行比较,两个位都为 1 时,结果才为 1,否则为 0。

举个例子:

a=4 #二进制为:0100
b=5 #二进制为:0101
c=a&b      #既二进制对应比较 0100 #  0101
#同时为1,则对应位数显示为1,否则为0
#对应结果应该是:0100

最终显示的是十进位的结果!
同理,其他的就好明白啦~
a|b:
两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0

a^b:
参与运算的两个二进制位不同时,结果为 1,相同时结果为 0。

“~” :
对参与运算的二进制位取反 .如~ 1为0,~0为1

<<:
将各个二进制位全部左移若干位,高位丢弃,低位补 0。由 << 右边的数字指定了移动的位数。

“>>”:
将左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数

三、如何进行位运算

下面针对我的smap盐度数据进行处理,通过查阅手册得知我的qc_flag为32 bit(位数)

每一位都表示一定的误差,当位数为0时,表示无表中体现的误差,位数为1时,有表中体现的误差。
简单来说,qc_flag中有1就说明,32 bit中有一位对应着一定的问题,可能是:陆地污染、风俗太大、银河辐射等等、、、

知道每一位对应的问题,我们再进行质量控制时,即可按需对比,比如我们想要风速小的数据,只有筛选(表中第12位)的数据是0的数据。

ok,下面打开nc文件中的iqc_flag,它告诉了我们如何比较你想要的位数:
打开发现,这些数字都是2的几次方(十进制数),这就告诉我们:
如果你想比较数据的第一位(时,将数据与1进行 & 比较
如果想比较第 8 bit ,将数据与256 进行比较 & 即可

import numpy as np
import netCDF4 as nc
filename ='G:\\SMAP\\01\\RSS_SMAP_SSS_L2C_r26542_20200120T090520_2020020_FNL_V04.0.nc'
f1 = nc.Dataset(filename)#
sss_smap_40km = f1.variables['sss_smap_40km'][:].data
sss_flg=f1.variables['iqc_flag'][:].data
#==========================================================
sss=np.array(sss_smap_40km[:,:,0])
qc=np.array(sss_flg[:,:,0])
# 比较第一位 bit
result=(qc&1)
# 取出质量控制之后的sss
sss_result=sss[result]
# 比较第八位 bit
result1=(qc&256)

当然,一般来说,我们肯定只想要最好的数据(没有上述表中所说明的问题),既 32 bit 中每一位都是0的数据,这样子就很简单啦

直接令所有的qc数据值等于0,再取出需要的数据即可:

import numpy as np
import netCDF4 as nc
filename ='G:\\SMAP\\01\\RSS_SMAP_SSS_L2C_r26542_20200120T090520_2020020_FNL_V04.0.nc'
f1 = nc.Dataset(filename)#
sss_smap_40km = f1.variables['sss_smap_40km'][:].data
sss_flg=f1.variables['iqc_flag'][:].data
#==========================================================
sss=np.array(sss_smap_40km[:,:,0])
qc=np.array(sss_flg[:,:,0])
# 比较第一位 bit
result=(qc==0)
# 取出质量控制之后的sss
sss_result=sss[result]


下面再进行你需要的处理(取出无效值)就可以啦~~

                                 一个努力学习python的海洋小白水平有限,欢迎指正!!!欢迎评论、收藏。

python处理smap level2c 数据---根据 iqc_flag进行数据质量控制(二进制十进制)相关推荐

  1. Python如何爬取实时变化的WebSocket数据

    作者 | 韦世东 来源 | 进击的Coder(公众号id:FightingCode) 一.前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据.股市实时数据或币圈实时变 ...

  2. Python中将两个列表(list)数据zip起来

    Python中将两个列表(list)数据zip起来 目录 Python中将两个列表(list)数据zip起来

  3. python使用matplotlib中的errorbar函数可视化误差条、并自定义数据点标记、数据点大小、数据点颜色、数据点边缘颜色、误差棒颜色、误差棒线条宽度、误差棒边界线长度、误差棒边界线厚度等

    python使用matplotlib中的errorbar函数可视化误差条.并自定义数据点标记.数据点大小.数据点颜色.数据点边缘颜色.误差棒颜色.误差棒线条宽度.误差棒边界线长度.误差棒边界线厚度等 ...

  4. Python使用SQLAlchemy连接数据库并创建数据表、插入数据、删除数据、更新表、查询表(CRUD)

    Python使用SQLAlchemy连接数据库并创建数据表.插入数据.删除数据.更新表.查询表(CRUD) 目录 Python使用SQLAlchemy连接数据库并创建数据表 #SQLAlchemy # ...

  5. python使用fpdf生成各种样式pdf表格数据

    python使用fpdf生成各种样式pdf表格数据 目录

  6. python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...

    有许多类似的问题,但没有一个答案解决了我的问题. 我定义了几个解析大型数据集的函数.首先,我调用数据,然后将数据(在.txt中表示为行和列)组织到列表中,我将为各个数据条目编制索引.在此之后,我建立了 ...

  7. python 可视化界面_工具推荐 | 3维数据可视化

    高维数据是一种非常常见的数据类型,其中包含了多种属性.比如:数值模式输出结果通常包含多种物理参量及多个时次,还有一些空间位置信息.尽管高维数据非常常见,但是高维数据的分析一直是个挑战.那么如何才能有效 ...

  8. 我们用Python分析了B站4万条数据评论,揭秘本山大叔《念诗之王》大热原因!...

    来源:恋习Python 本文约2000字,建议阅读10分钟. 我们通过Python大法通过获取B站:[春晚鬼畜]赵本山:我就是念诗之王!4万条数据评论,与大家一起看看其背后火起来的原因. 1990年本 ...

  9. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作

    问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...

  10. python 处理数据量大的数据内存_PyTables处理的数据比内存大很多倍

    记忆结构 从未使用过pytables,但查看源代码:class _Deadnodes(lrucacheExtension.NodeCache): pass 因此,看起来死节点是使用LRU缓存实现的.L ...

最新文章

  1. 今日头条李磊等最新论文:用于文本生成的核化贝叶斯Softmax
  2. 北师大毕彦超:AI和人类感知的相同点和不同点
  3. 【数据结构与算法】之树的概念与使用
  4. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理
  5. VSCode中Clangd无法找到stdio.h
  6. 东芝Toshiba e-STUDIO4515AC 一体机驱动
  7. 三基色配色表java_【调色】颜色配色表 适合重彩搭配用
  8. API(15)——打印系统开发(52)——WinForm开发(62)——C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
  9. 【测试开发】一个5年测试开发的成长经验,大学毕业就开启他的职业生涯......
  10. 录屏软件 OBS 入门笔记
  11. 【沃顿商学院学习笔记】商业分析——Customer Analytics:01 描述性分析 Descriptive Analytics
  12. linux各个目录介绍,Linux各目录及每个目录的详细介绍
  13. DNS主从域名解析服务器
  14. 取汉字的拼音简码.如果是其它字符,则原样返回(2010)
  15. [练习][错误]MyBatis出错:Error instantiating class com.entity.Grade with invalid types () or values ().
  16. GeoTools源码解读 - XML处理
  17. gta5股票服务器维护,各位大佬问一下GTA5 股票里的BAWSAQ为什么一直维护啊
  18. 专利产品是专利授权的重要基石
  19. SPSS R插件及PS Matching插件最详细简洁的安装经验
  20. 基于Springboot和mybatis在线考试系统的设计与实现

热门文章

  1. 安卓日历每日提醒_好用的安卓日历Jorte:可添加待办事项和提醒
  2. Word替换重复的内容
  3. 要装系统就装WINDOWSXPSP3VL正式版操作系统
  4. 使用命令行——查看笔记本电池损耗程度
  5. ngx_stream_core_module
  6. ueditor编辑器二次开发与优化
  7. 计算机硬盘有磁性材料吗,电脑硬盘里有磁铁吗
  8. photoshop cs6 下载并安装教程
  9. 除了攀附名人、杜撰荣恩录,家谱造假中,还有这件事令人羞耻
  10. 扫描件如何转换成pdf及word文档?