当前位置: 首页 > article >正文

IDL学习笔记(一)数据类型、基础运算、控制语句

近期,需要用到modis数据批量预处理,于是重新学习idl,感谢郭师兄推荐,以及张洋老师的详细教导。特以此为学习笔记,望学有所成。

IDL学习笔记(一)

  • 数据类型
    • 数据类型
    • 创建数组
    • 类型转换函数
    • 代码输出
      • print
      • 往文件中输出
    • help查询命令
  • 基础运算
    • 关系运算
  • 控制语句
  • 第一次程序编写
    • 函数编写
  • 第一次作业

IDL注释为;

数据类型

数据类型

在这里插入图片描述

创建数组

Result = 函数([D1[,…,D8])至多八个维度
常见函数:
BYTARR: 字节型数组
DBLARR:双精度浮点型
FLTARR:浮点型数组
FINDGEN:浮点型索引数组
indgen:整型索引数组
STRARR:字符串

函数不区分大小写

BYTARR,DBLARR,FLTARR,INTARR, LON64ARR,LONARR,UINTARR,ULON64ARR,ULONARR,STRARR
BINDGEN,DCINDGEN, DINDGEN,FINDGEN,CINDGEN,LINDGEN,-SINDGEN,UINDGEN, UL64INDGEN, ULINDGEN

类型转换函数

BYTE, FIX, COMPLEX, DCOMPLEX, DOUBLE, FLOAT, LONG, LONG64, STRING,UINT, ULONG, ULONG64

整型 转换为 浮点型
a = indgen(5,5)
浮点型 转换为 整型
b = float(a)

FIX:转换为整型

IDL 中第一维是列,第二维是行,下标从0开始

代码输出

print

在这里插入图片描述

往文件中输出

openw,1,'D:/out.txt'

这里的1是硬盘的一个硬件存储位置,用1代替,运行后会创建一个txt

b=intarr(3,4)
printf,1,b
printf,1,'hello'

这个意思是往1当中,把b写进去。这里的1代指硬件地址。此时打开文件是看不到东西的,因为文件被idl占用了,所以需要归还文件,代码为:

free_lun,1

此时可以看到内容了。

注意:
此时再次,使用

openw,1,'D:/out.txt'
printf,1,'hello'
free_lun,1

此时文件中只剩下hello了,这是因为openw这个操作,不加其他关键字的时候,代表新建一个文件,若存在,则清空后新建,写入新的东西,原本东西不复存在。

那么如何保留之前的,继写呢?加关键字!

IDL> openw,1,'D:/out.txt',/append

这样就可以续写了!

help查询命令

HELP[,Expression1,…,ExpressionN]
查询对象相关信息
查询未知对象a的信息

help,a

可以输出数据类型 、行数、列数。

基础运算

创建数组的时候,一定要记住他的下标(几)。且下标从0开始的。

a = findgen(3,4)
print,a[3,4]

上述代码是错误的,a没有第三列第四行,因为从0开始,下标最大只有[2,3]。

在这里插入图片描述
索引数组是从0开始,按行蛇形排列的。

IDL> a = findgen(3,4)
IDL> print,a 

结果为:
0.00000 1.00000 2.00000
3.00000 4.00000 5.00000
6.00000 7.00000 8.00000
9.00000 10.0000 11.0000

关系运算

在这里插入图片描述

a = findgen(3,4)
print,a gt 5

结果为:
0 0 0
0 0 0
1 1 1
1 1 1
返回的是0或者1

(a gt 5) * a
print,c

这样就可以把大于5的保存,小于5的赋值为0,结果为
0.0000000 0.0000000 0.0000000
0.0000000 0.0000000 0.0000000
6.0000000 7.0000000 8.0000000
9.0000000 10.000000 11.000000

控制语句

在这里插入图片描述

第一次程序编写

pro  program_name_firstClass
  print,'hello
  a = 'cccc'
  print,a

end

最基本的是:

pro 程序名

程序题

end

并且保存的文件名必须要 和 程序名 保持一致。

函数编写

如果需要函数,可以再pro前面先定义好function,比如


function fun_name


end


pro  program_name_firstClass
  print,'hello
  a = fun_name
end

第一次作业

在这里插入图片描述

pro  program_name_firstClass
  a = findgen(4,6)
  b = 3
  c = [3]
  d = [9,3,1]
  print,'a[3,4]'
  print,a[3,4]
  print,'a[15]'
  print,a[15]
  print,'a+b'
  print,a+b
  print,'a[1,1]+b'
  print,a[1,1]+b
  print,'a+c'
  print,a+c
  print,'a+d'
  print,a+d
 
end

输出:
a[3,4]
19.0000
a[15]
15.0000
a+b
3.00000 4.00000 5.00000
6.00000
7.00000 8.00000 9.00000
10.0000
11.0000 12.0000 13.0000
14.0000
15.0000 16.0000 17.0000
18.0000
19.0000 20.0000 21.0000
22.0000
23.0000 24.0000 25.0000
26.0000
a[1,1]+b
8.00000
a+c
3.00000
a+d
9.00000 4.00000 3.00000

解析:
① a[3,4]指的是第四列的第五行,行列不要搞混
② a+c等于一个单数3。是因为数组第二个元素维度不相同,则只有和【较小数组】一样大的元素进行相加后,得到结果。即c[0]+3 = 3.0000 ( 因为c是浮点数,所以默认是float )

pro  program_name_firstClass
  a = [[3,9,10],[2,7,5],[4,1,6]]
  print,a
end

结果为:

       3       9      10
       2       7       5
       4       1       6
pro  program_name_firstClass
  a = [[3,9,10],[2,7,5],[4,1,6]]
  print,'a'
  print,a
  b = [[7,10,2],[5,8,9],[3,1,6]]
  print,'b'
  print,b
  c = a+b
  print,'c'
  print,c
  d = a*b
  print,'d'
  print,d
end

A*B是对应位置元素相乘。

结果为:

a
       3       9      10
       2       7       5
       4       1       6
b
       7      10       2
       5       8       9
       3       1       6
c
      10      19      12
       7      15      14
       7       2      12
d
      21      90      20
      10      56      45
      12       1      36

除法的时候,处于整数要小心,是否结果需要的是float

在这里插入图片描述

pro  program_name_firstClass
  a = [[0,5,3],[4,0,2],[0,7,8]]
  b = [[0,0,1],[9,7,4],[1,0,2]]
  c = (a gt 3)*a
  print,'a'
  print,a
  print,'c'
  print,c
  
  print,'b'
  print,b
  d = (b le 4)*b +(b gt 4)*9
  print,'d'
  print,d
  
  e = (a+b)/2.0
  f = (a+b)/2
  print,'e'
  print,e
  print,'f'
  print,f
  
  g = float(a+b)
  h = (a gt 0)+ (b gt 0)
  j = g/h
  print,'j'
  print,j

结果为:


a
       0       5       3
       4       0       2
       0       7       8
c
       0       5       0
       4       0       0
       0       7       8
b
       0       0       1
       9       7       4
       1       0       2
d
       0       0       1
       9       9       4
       1       0       2
e
      0.00000      2.50000      2.00000
      6.50000      3.50000      3.00000
     0.500000      3.50000      5.00000
f
       0       2       2
       6       3       3
       0       3       5
j
         -NaN      5.00000      2.00000
      6.50000      7.00000      3.00000
      1.00000      7.00000      5.00000

解析:

  1. d = (b le 4)*b +(b gt 4)*9
  2. g = float(a+b)
    h = (a gt 0)+ (b gt 0)
    j = g/h

这两个逻辑关系要复习,在纸上画一下就可以知道为什么了



http://www.kler.cn/a/420141.html

相关文章:

  • Linux中dos2unix详解
  • 什么是 Kubernetes(K8s)?
  • 03-13、SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel
  • 智能运维在配电所设备监控中的应用与洞察
  • 【AI系统】昇腾异构计算架构 CANN
  • Leetcode 每日一题 205.同构字符串
  • husky,commit规范,生成CHANGELOG.md,npm发版
  • vscode 怎么下载 vsix 文件?
  • SQL面试题——抖音SQL面试题 共同问题—共同使用ip用户检测问题
  • 龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2
  • ubuntu20以上配置登录失败处理
  • 在OpenHarmony系统下开发支持Android应用的双框架系统
  • 基于K-NN + GCN的轴承故障诊断模型
  • TIE相位恢复算法--两次对焦距离和位置、折射率不均匀、相位大小的分析
  • 【379】基于springboot的防疫物资管理信息系统
  • 【SQL】实战--查找重复的电子邮箱
  • Redis开发04:Redis的INFO信息解析
  • A058-基于Spring Boot的餐饮管理系统的设计与实现
  • 【森林生态系统揭秘】用R语言解锁森林结构、功能与稳定性分析!生物多样性与群落组成分析、路径分析、群落稳定性分析等
  • 【算法刷题指南】优先级队列
  • 力扣 二叉树的锯齿形层序遍历-103
  • Unity Ads的常见问题:投放、变现、安装等
  • 施耐德电气:多维解构AI挑战,引领产业创新变革
  • 【Vue】组件、组件生命周期、钩子函数
  • 计算帧率、每秒过多少次
  • 数据结构实训——查找