请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6393|回复: 16

[程序设计] 关于赋值缺省值为NaN后数据异常偏小

[复制链接]

新浪微博达人勋

发表于 2018-6-25 08:12:03 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 lynpatty 于 2018-6-25 19:41 编辑

想向各位老师请教,在计算某区域全年降水百分位值时需要先把missing value 设置为NaN后进行计算,代码如下。但我查了一下最后得出来的百分位值要比实际低很多。应该是在处理missing value这一块时在数据量级上出了问题,想请各位老师看看代码哪里出了错。
clear all;
clc

fname='/User/Downloads/cpc-precip/precip.1982.nc';
ncid = netcdf.open(fname,'NOWRITE'); %?¨°??nc????
ncdisp(fname); %% mm/day
precip=ncread(fname,'precip');
lon=ncread(fname,'lon');
lat=ncread(fname,'lat');
time=ncread(fname,'time');
netcdf.close(ncid);

data=precip(472:491,105:114,1:365);
data(data==-9.969209968386869e+36)=NaN;
p1=prctile(data(:),95);

在工作区出现的data值都偏小,有的甚至为零。。。 0       NaN       NaN       NaN       NaN
         0         0         0       NaN       NaN
         0         0         0         0       NaN
         0         0         0         0         0
         0         0         0         0         0
         0         0         0         0         0
         0         0         0         0         0
    0.2710         0         0         0         0
    0.5730    0.0262         0         0         0
    0.0277         0         0         0         0
         0         0         0         0         0
         0         0         0         0         0
         0         0         0         0         0


屏幕快照 2018-06-25 下午12.38.36.png
屏幕快照 2018-06-25 下午12.38.58.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 08:17:57 | 显示全部楼层
你可以看一下find的函数,用find函数就可以解决这个问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 08:18:58 | 显示全部楼层
data(data<-100)=NaN;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 08:32:31 | 显示全部楼层
常山赵子龙 发表于 2018-6-25 08:17
你可以看一下find的函数,用find函数就可以解决这个问题。

data(find(data==-9.969209968386869e+36))=NaN;
您好,我改成了这样,但是结果并没有改变,您看这样是对的吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 08:34:03 | 显示全部楼层

您好,按照您的建议改动了,但是结果也没有变化呢。您看我是不是需要乘以一个scale的问题?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 09:30:31 | 显示全部楼层

这个应该是可以的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 09:51:19 | 显示全部楼层
我觉得你是用错函数了,我看了pctile这个函数的解释,似乎不是你想要的东西。
The sorted values in X are taken as the 100(0.5/n)th, 100(1.5/n)th, ..., 100([n – 0.5]/n)th percentiles.
For a data vector of five elements such as {6, 3, 2, 10, 1}, the sorted elements {1, 2, 3, 6, 10} respectively correspond to the 10th, 30th, 50th, 70th, and 90th percentiles.
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 17:32:21 | 显示全部楼层
Wetter 发表于 2018-6-25 09:51
我觉得你是用错函数了,我看了pctile这个函数的解释,似乎不是你想要的东西。
The sorted values in X are ...

你好,我考虑过这件事,但最后我还是觉得是小数点的问题,因为我尝试对矩阵取平均之后发现矩阵平均为零点几这样。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 18:50:36 | 显示全部楼层
不该用等于 而是大或小
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-25 19:01:55 | 显示全部楼层
Lancelot 发表于 2018-6-25 18:50
不该用等于 而是大或小

data(data<-100)=NaN;
我用了这个语句试过了以后也是一样的。。而且在工作区查看data的时候发现数据特别小。。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表