MATLAB常用函数记录

13 篇文章 5 订阅
13 篇文章 2 订阅

1、查找所有nan数据并赋新值

      Data(isnan(Data))=-9999;

2、获取指定目录下的所有指定类型文件列表

      ncFilePath='E:\Sciencetific Data\ET Products\*.nc';
      imageList=dir(ncFilePath);%获取该文件夹中所有tif格式的图像 

3、获取不带文件后缀的文件名

      filename =Monthly_PML_ETa_1981.nc;

      filenameWithoutSufix = filename(1:find(filename=='.')-1);

4、数字长度不够指定长度前补充0

      aa=num2str(11,'%03d') %不足3位是前面补充0,即011

5、对于一个3维的数据序列data,对其数据求均值,求和

    meanarr=mean(data,3); 其中3表示要提取的维数

   sumarr=sum(data,3)

6、解方程中的未知数

     syms n  %定义符号变量
     R=1301;P=1968;ET0=882;
     result_n=solve(P-R==P*ET0/(P^n+ET0^n)^(1/n))   %方程中只有n是未知数,即可求出来了

7、求导数

  syms P ETO n;
   R=P-(P*ET0)/(P^n+ET0^n)^(1/n);
   dP=diff(R,P,1)     %对P求一阶导数,结果为 dP=(ET0*P*P^(n - 1))/(ET0^n + P^n)^(1/n + 1) - ET0/(ET0^n + P^n)^(1/n) + 1

8、对复杂公式进行简洁化显示

用函数 pretty(),就到达了我们平时所见到的显示方式了。

9、读取text中的内容

数据如下所示:

AI_1960.tif,2.44598346323937
AI_1961.tif,1.85174840082156 。。。。

[filename,data]=textread(txtFullPath,'%s %f','delimiter',',') 

其中,%s表示读取字符串,%f读取浮点数字,并且用分隔符 逗号 分隔

10. 读取的数据为cell格式转为数字

   str2num(cell2mat({'11'}))

11. 数据为cell格式转为string

char({'aa'})

12. MATLAB输出时不要科学计数法

format short g  或者  format long g

13. 获取指定年月内的天数

eomday(年,月);返回的结果就是当前年月内的天数,或者最后一天的排序

14. 获取指定年或月内的天数

dayNumInMonth=datenum(2000,3,1)-datenum(2000,2,1); %获取2月份的天数

dayNumInYear = datenum(2001,1,1)-datenum(2000,1,1); %获取2000年的天数

15.保存矩阵到TIFF地理数据

 outputFullPath='E:\test\Vegetation.tif'
latrange=[-90 90];   lonrange=[0 360];
Refference = georasterref('RasterSize', size(data),'Latlim',latrange, 'Lonlim', lonrange);%1地理栅格数据参考对象(类) 
geotiffwrite(outputFullPath, flipud(data), Refference);%生成tif文件,可以在arcgis中打开了就。

14.快速获取当前年份的总天数

 dayNumInYear=datenum(2000,12,31)-datenum(2000,1,1)+1;

15. Matlab中显示和ArcGIS的现实相差180度

    data=(rot90(yearPre,1));  %旋转后,导出为geotiff,GIS可正常显示
    imagesc(flipud(data))     %MATLAB中还要翻转一次,和arcgis180°翻转关系

16.已知数据的年内日序号获取年月日

for iyear=1979:1997
    pcp_WorldDailyMSWEP=ncread([inDir,num2str(iyear),'.nc'],'precipitation');
    for imonth=1:12
        startDayIdx=datenum(iyear,imonth,1)-datenum(iyear,1,1)+1;  %当前月开始日序号
        daysNumInMonth=eomday(iyear,imonth); 
        endDayIdx=startDayIdx+daysNumInMonth-1;                            %当前月结束日序号
        for iday=startDayIdx:endDayIdx                                                    %循环当前月内的所有日期

        end

      end

end

17.根据全球经纬度和中国经纬度范围获取行列号

全球边界的经纬度范围:[0   360]  [-60 60],
中国待提取边界范围是:[70 140]  [15 55]
 所以,提取中国区域的方式是:
 左边界:[70-(0)]/0.25+1=281   右边界:[140-(0)]/0.25=560   
 上边界:[(60-55)]/0.25+1=21    下边界  :[(60-15)]/0.25=180

18.判断当前文件或文件夹是否存在

if ~exist('路径','dir')  %判断文件夹是否存在,不存在就创建一个
    mkdir('路径');
end

if ~exist('aa.mat','file') %判断文件是否存在
   display('no file'));
end

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值