ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算

简介: ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算

0. 学习准备

0.1 学习语言,注释是当然需要明白。

单行注释使用半角的分号(;) , 一行中分号后面的代码均为注释(貌似没有多行注释)

0.2 换行符$

有时候我们的代码比较长,一行可能写起来就比较拥挤,那么使用换行符$可以将其一分为二。

 

; 原来这么写就一行
openw, 3, 'E:\网盘yy'
; 现在你觉得一行写代码太长可以分两行
openw,$
    3, 'E:\hello.txt'
; 但不是说随便一行代码的某一处都能用$一分为二换成两行写,譬如变量名中间,函数名中间都不能用$一分为
; 二,像上面我写的其实就是很多场景会使用到的分行写,其余情况我用的比较少,所以大家自己看看,经验多
; 了就好了。

0.3 快捷键

趁手的快捷键你总得会几个吧?

  • ctrl+‘+’;放大字体,‘-’缩小字体;
  • alt+‘?’;选择函数,可自动补全函数名;
  • crtl+‘;’;批量注释;
  • 光标放在需要查看的代码处,按F1查找相关帮助文;(或控制台操作:?[函数名])

我经常使用的就这些快捷方式,具体其它快捷键你可以查看IDL软件


 

1. 常用数据类型

1.1 基本知识


微信截图_20230703154846.png


(示例中等号左边的A是自变量, 等号右边的数值是赋值给变量的值, 末尾的符号表示数值的类型。譬如, B表示byte型, S表示整型, U表示无符号型等等)

注意:粗体字的几种类型是常见的类型,是需要掌握的,其它的知道就可以,仅作了解。

1.2 举例示范

下面使用交互式环境进行演示(win + r 输入idl(大小写均可)即可打开)

需要说明的是,IDL定义变量时无需如同C语言去提前声明变量的类型。

1.2.1 定义一个整型变量(当然, 5后面你也可以添加一个S或者s)



1.2.2 定义一个无符号长整型变量(同样的,ul大写小写都一样,之后不再重述)



1.2.3 定义一个浮点型变量



1.2.4 定义一个字符型变量(这里和python类似, 可以用单引号(')也可以使用双引号(")。但是我们一般使用单引号)



其它定义变量也是类似的,这里不再重复赘述,可以参考上面的表格尝试定义变量!


2.创建数组

2.1 基本知识

创建数组:

Result = 类型数组创建函数([D1, ..., D8]),至多8个维度

2.1.1 等号左边是变量(这里Result是变量,不是说一定得写Result,这变量名就是一个标识符,和C语言的变量名一样, 你也可以用其他的变量名,这里只是做示范均使用Result作为变量名)

2.1.2 等号右边是函数名,至于使用何种函数名取决于数组元素的类型

    举几个例子:

        如果数组元素是整型那么就是  Result = intarr(4, 2)

       如果数组元素是浮点型那么就定义 Result = fltarr(4, 3)

       另外需要额外说一嘴:函数名不区分大小写!!!

2.1.3 括号内填上维度, 譬如三列四行(二维)往括号内传入[3, 4]———》注意先列后行,和C语言不一样

2.1.4 其实直接在括号内填上各个维度也是可以的, 譬如4列2行即Result = 类型数组创建函数(4, 2)

2.1.5 对于你定义好的数组,idl会默认赋值为0或None之类的(即初始化,当然像一些如indgen()这种函数初始化的元素是0,1,2,3,4样式的。)

2.1.6 几种常见的定义数组的函数

    类型数组创建函数:(时常使用的就是下面三个飘红的函数,fltarr是浮点型数组,intarr是整

       型数组, strarr是字符型数组)

(记忆也不是很难, flt是float浮点数的缩写, int是integer(整型)的缩写, str是string字符

       串的缩写, arr是array数组的缩写)

BYTARR, DBLARR, FLTARR, INTARR, LON64ARR, LONARR, UINTARR, ULON64ARR,

       ULONARR, STRARR

BINDGEN, CINDGEN, DCINDGEN, DINDGEN, FINDGEN, LINDGEN, -SINDGEN,

       UINDGEN, UL64INDGEN, ULINDGEN,INDGEN)  

(上面四处高亮部分是重点记忆的,之后90%以上的场景都会用到,其它函数的概率很低(我基本不怎么用),可以做一个了解,需要用时再拿来回忆一下)

       函数写法不区分大小写————> 强调(即你可以将上述的例如FLTARR写成fltarr去使用)

2.1.7 对数组元素取值

这里需要注意, 我们对数组元素取值一般指定行列数(注意,这里行列数的起始是0开始,和C语言是一样的)

譬如,我要对3列2行的数组(数组名是a)取第2列第1行的值(注意,下标是从0开始,即第0,1,2列,第0,1行),那么取值就应该是a(2, 1) ————》左边是列,右边是行,和C语言是不大一样的。

看一下例子:



2.2 举例示范

2.2.1 创建2列3行的浮点数组(默认初始化为0)


 

2.2.2 创建3列2行的整型数组(默认初始化为0)


 

2.2.3 创建4列2行的字符串数组(默认为None,就什么也没有但是占了个位置)

 


其它的数组创建类似这样子,这里不再赘述!


3.类型转换

3.1 基础知识

3.1.1 类型转换是什么?

      将一种数据类型转换成另一种数据类型即是数据转换,譬如将int型转换为float型是类型转换,int型转换为double型也是类型转换。

   当然,你可以将高精度的数据类型转换为低精度的数据类型(不会吧, float精度肯定是高于int型的,你不会不知道吧?人家还有小数部分呢),但是,会有精度损失。譬如将float型数据转换为int型数据, 小数部分是会被丢失的。

3.1.2 类型转换的一些常见函数

      你需要将数据转换成什么类型,那么就用哪种函数。好像有点lao。

       这么说,譬如你需要将int型的520转换成float型数据,那么就是float(520)即可——和C语言是差不多的。

  唯一需要注意的是:将某种数据转换为int型是使用fix函数,其他的函数一般是见名知意。譬如float函数一看就是转换为float型的, long函数一看就是转换为长整型的等等。

       另外,fix函数将float型数据转换为int型我们说是有精度损失的,这里我试了一下,好像是全部向下取整,注意不是四舍五入,即将小数部分直接抹掉,只取整数部分。其它的一些精度损失大家自己去看看,不用过分纠结,用的时候再说。

       还有,你要知道,有一些类型之间是不能转换的,用常识相信你应该知道的。譬如str型是不能转换成int的等等,否则报错!!


类型转换函数:(常用的不多)

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

(大部分情况你都只会用到上述两处高亮部分的转换函数,其它使用的频率比较低,作了解即可)

3.2 举例示范

3.2.1 将int型数据转换为float型数据


 

上面是单个数,其实数组可以类型转换,因为数组里面也是一个个的元素,他们也有数据类型诸如int型,float型啊什么什么的

这里来一个例子:



其他的类型转换类似,这里不再赘述!


4.print输出

4.1 常规的print输出

print输出和C语言的输出不大一样,直接看代码

格式: print + 半角逗号 + 变量名————》至于你中间有没有空格,有几个都无所谓,人家是靠逗号分隔的,我有python的习惯所以习惯这样子写。



4.2 不一样的printf输出

细心的你应该发现,这里多了一个f。这说明printf不是输出到控制台或者说不是输出到屏幕上的(其实也可以,只是正常人不会用这个函数这么干,直接用print不是更便捷吗,printf相比于print有更为广泛的用途。)。

而是输出到文件中的,那么输出到哪个文件中呢?

你要输出到哪个文件中,是不是应该打开先打开这个文件(即将这个文件从硬盘加载到内存中来,所以需要先打开文件);打开文件之后你是不是应该知道这个文件放在内存中的哪个地方,所以需要获取文件的内存地址;最后输出文件就是根据内存地址输出到指定的位置(即该文件的内存地址)。.

好,那么先打开文件,使用openw函数 ==> 以写入的模式打开。(openr函数是以读模式打开)

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

(这里的1代指打开的文件的内存地址,因为内存地址如果真的给你,那么那是一串非常长的你不认识只有电脑认识的数字字母混合体,所以你可以直接给定一个数字表示当前程序中某一个文件的内存地址,以后要寻找该文件或者对该文件进行一些处理那么只需要知道你给定的这个数字即可。)

输出字符串到txt文件

printf, 1, ’hello’

打开了文件就需要关闭文件(指定需要关闭文件的内存地址所指代的数字即可)

free_lun, 1


5.基本运算

和其它语言差不多,这里简单介绍大家自行尝试。


微信截图_20230703155544.png


示例:


 

6.关系运算

这个也是比较简单,但是使用的符号可能和之前学过的语言用法不一样。


1.png


记忆方法:


2.png


目录
相关文章
|
4月前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
|
5月前
|
C语言
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
|
5月前
|
C语言
C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)
C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)
59 0
|
6月前
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
|
6月前
|
Python Java Go
Python每日一练(20230420) 数组逐位判断、交错字符串、二进制求和
Python每日一练(20230420) 数组逐位判断、交错字符串、二进制求和
74 0
Python每日一练(20230420) 数组逐位判断、交错字符串、二进制求和
|
C语言
C语言:写一个函数返回参数二进制中 1 的个数(三种思路)-1
思路一:使用 %2 和 /2 取出每一位并判断 总体思路: (一). 创建函数,参数要设置成无符号整数,设置计数器计算1的个数 (二). 使用 while循环 循环判断二进制每一位, 使用 %2 判断最低位是否为 1, 使用 /2 去掉判断了的最低位,下次循环开始判断新的最低位
 C语言:写一个函数返回参数二进制中 1 的个数(三种思路)-1
|
C语言 C++
编写一个程序,用同一个函数名对n个数据进行从大到小排序,数据类型可以是整型、单精度型。要求用重载函数实现。
编写一个程序,用同一个函数名对n个数据进行从大到小排序,数据类型可以是整型、单精度型。要求用重载函数实现。
|
Python
Python 用类重载乘法运算符计算和打印杨辉三角形
Python 用类重载乘法运算符计算和打印杨辉三角形
87 0
|
Python
【Python零基础入门篇 · 2】:掌握各种运算符和变量、input()输入输出、映射函数map()结合input()和split()函数实现多值输入
【Python零基础入门篇 · 2】:掌握各种运算符和变量、input()输入输出、映射函数map()结合input()和split()函数实现多值输入
126 0
【Python零基础入门篇 · 2】:掌握各种运算符和变量、input()输入输出、映射函数map()结合input()和split()函数实现多值输入