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

news2025/2/5 15:55:51

近期,需要用到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.coloradmin.cn/o/2252516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——排序第三幕(深究快排(非递归实现)、快排的优化、内省排序,排序总结)超详细!!!!

文章目录 前言一、非递归实现快排二、快排的优化版本三、内省排序四、排序算法复杂度以及稳定性的分析总结 前言 继上一篇博客基于递归的方式学习了快速排序和归并排序 今天我们来深究快速排序,使用栈的数据结构非递归实现快排,优化快排(三路…

【语音识别】Zipformer

Zipformer 是kaldi 团队于2024研发的序列建模模型。相比较于 Conformer、Squeezeformer、E-Branchformer等主流 ASR 模型,Zipformer 具有效果更好、计算更快、更省内存等优点。并在 LibriSpeech、Aishell-1 和 WenetSpeech 等常用数据集上取得了当时最好的 ASR 结果…

Python酷库之旅-第三方库Pandas(251)

目录 一、用法精讲 1186、pandas.tseries.offsets.BusinessMonthEnd.is_year_start方法 1186-1、语法 1186-2、参数 1186-3、功能 1186-4、返回值 1186-5、说明 1186-6、用法 1186-6-1、数据准备 1186-6-2、代码示例 1186-6-3、结果输出 1187、pandas.tseries.offs…

【06】Selenium+Python 定位动态ID

有时候页面元素的ID是动态变化的,这种变化的ID,无法通过By.ID来定位,也无法通过BY.XPATH的绝对路径来定位 比如此li标签的id,中间的数字部分就是变化的,刷新页面后,id中间部分的数字就会变化 刷新页面前ID:…

leetcode 之 二分查找(java)(2)

文章目录 74、搜索二维矩阵33、搜素旋转排序数组 74、搜索二维矩阵 题目描述: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff…

16asm - 汇编介绍 和 debug使用

文章目录 前言硬件运行机制微机系统硬件组成计算机系统组成8086cpu组织架构dosbox安装配置debug debug使用R命令D命令E命令U命令T命令A命令标志寄存器 总结 前言 各位师傅大家好,我是qmx_07,今天给大家讲解 十六位汇编 和 debug调试器的使用 硬件运行…

UE4_材质节点_有关距离的_流体模拟

一、材质节点介绍: 特别注意:距离场需要独立显卡支持。 1、什么是距离场? 想象一下空间中只有两个实体, 一个球,一个圆柱. 空间由无数个点组成, 取其中任何一个点, 比如,它跟球面的最近距离是3, 跟圆柱面的最近距离是2, 那么这个点的值就…

win10系统安装docker-desktop

1、开启Hyper-v ———————————————— Hyper-V 是微软提供的一种虚拟化技术,它允许你在同一台物理计算机上运行多个独立的操作系统实例。这种技术主要用于开发、测试、以及服务器虚拟化等领域。 —————————————————————— &#…

【小白学机器学习39】如何用numpy生成总体,生成样本samples

目录 1 目的:研究 样本和总体之间的关系 2 先生成1个理论总体 2.0 下面是关于这一步的完整代码 2.1 一般情况下,我们先生成一个符合正态分布的总体 2.1.1 设置总体 ,或者说生成一个总体 2.2 为什么一定要是一个符合正态分布的总体&…

“指标管理系统”是什么?企业如何搭建指标管理系统?

在当今数字化时代,数据已成为企业决策的重要依据。然而,海量数据中如何筛选出关键指标,并对其进行有效管理,成为了众多企业面临的难题。为此,指标管理系统应运而生,它旨在帮助企业规范化定义、统一管理和高…

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议(Internet Protocol,IP),又称互联网协议。是OSI中的网络层通信协议,用于跨网络边界分组交换。它的路由功能实现了互联互通,并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…

运维工作常用Shell脚本(Commonly Used Shell Scripts for Operation and Maintenance Work)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

机器学习8-决策树CART原理与GBDT原理

Gini 系数 和Gini 系数增益 CART决策树算法流程举例 该篇文章对于CART的算法举例讲解,一看就懂。 决策树(Decision Tree)—CART算法 同时也可以观看视频 分类树 GBDT原理举例 可以看如下示例可以理解GBDT的计算原理 用通俗易懂的方式讲解: GBDT算法及…

oracle中删除指定前缀的表

近期接手做的项目,发觉数据库中有许多多余的表。究其原因,应该是同事贪图方便,将过去做过的项目复制粘贴,然后修修改改。包括数据库也是克隆过来的,然后又没有删除本项目多余的表,结果经过几个轮回&#xf…

JAVA篇10 —— 常用类WrapperStringMathArraysSystemBigIntegerBigDecimal日期

欢迎来到我的主页:【一只认真写代码的程序猿】 本篇文章收录于专栏【小小爪哇】 如果这篇文章对你有帮助,希望点赞收藏加关注啦~ 目录 1 包装类 1.1 包装类和String 1.2 int&char包装类常用方法 2 String类 3 Math 类 4 Arrays类 5 System类…

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑,肯定是很多人不想看到的,我的开源软件PakePlus是使用tauri开发的,PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序,利用Tauri轻松构建轻量级多端桌面应用和多端手机应用,为了实现发布的时候…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 通义灵码走进北京大学创新课堂,与 400…

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit(地图服务)是鸿蒙生态下的一个地图服务,为开发者提供强大而便捷的地图能力,助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能,轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【四轴】基于IIC通信读写MPU6050寄存器

1. 基本原理 在这篇【四轴】软件IIC通信的实现 – Dukis Blog博客中,我介绍了软件IIC的实现方式。而MPU6050,正是一种通过IIC进行通信的传感器外设。 1.1 什么是MPU6050 MPU6050 是 InvenSense 公司推出的一款6 轴惯性传感器模块,广泛应用于姿…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage) 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…