IDL遥感应用入门(1):基本语法练习
发布时间: 2014-01-03
所属分类: IDL遥感应用教程
初步接触了下IDL在遥感方面的应用,准备写个系列小教程,重点集中在IDL海洋遥感方面。
这个小系列教程是示例化的,不是传统的IDL深入浅出,每个示例用到的数据都提供下载地址,文章写的很仓促,我的水平亦是有限,如有错误欢迎指出,如有建议欢迎提出。
言归正传,本节的主要目的是IDL的语法,整个程序可以正常运行,下面是代码
;尹全超-程序1
;2013-09-29
PRO yinquanchao_1
;-----------------------------------------------------
; PRACTICE WITH SCALARS
;-----------------------------------------------------
x=99
y=100
print ,"x+y=",(x+y)
print ,"x-y=",(x-y)
print ,'USE & character'
x=99&y=100& print ,'x+y=',(x+y)& print ,'x-y=',(x-y)
;the result of adding 3 times X to 2 times Y
print ,'3x+2y=',(3*x+2*y)
;the product of (X-Y) and (X+Y)
print ,'(x+y)*(x-y)=',(x+y)*(x-y)
;the common logarithm of the absolute value of X+Y
print ,ALOG10(ABS(x+y))
;difference between X = 5/2 and Y = 5./2
print , 'x=5/2' , (5/2) ;输出结果是2. 整数
print , 'x=5./2' , (5./2) ;输出结果是2.50000 浮点数
;difference between X = FLOAT(5/2) and Y = FLOAT(5)/2
print , 'X = FLOAT(5/2)' , FLOAT(5/2) ;把结果转换成一个浮点数
print , 'Y = FLOAT(5)/2' , FLOAT(5)/2 ;先把5转换成浮点数,然后进行运算
;define a string variable for each word in the sentence:
;"This is a concatenation"; then concatenate them and print the result
str1='This' & str2='is' & str3='a' & str4='concatenation'
print , str1 + ' ' + str2 + ' ' + str3 + ' ' + str4
;-----------------------------------------------------
; PRACTICE WITH VECTORS
;-----------------------------------------------------
x = INDGEN(100)
;How many elements does X contain
print , 'The elements of X is' , N_ELEMENTS(x)
;What is the minimum value in X
print , 'The minimum value in X is ' , MIN(x)
;What is the maximum value in X
print , 'The maximum value in X is ' , MAX(x)
;What is the sum of all the elements in X
print , 'The sum of all the elements in X is' , TOTAL(x)
;Print X to your terminal window
print ,x
;How are values in X related to the corresponding subscripts?
;->Answer: x[0],x[1]......x[99] => 从0到99,100个元素
;Is X a floating-point array?
;->Answer: Of course not
;Print the fifteenth entry in X to your terminal
print , 'The fifteenth entry in X is' , x[14]
;print the entry containing the number 15
print , 'the entry containing the number 15' , x[15]
;Is X a row-vector or a column-vector?
;->Answer: row-vector
;PRINT,TRANSPOSE(X) 转换列向量
print ,TRANSPOSE(x)
;Try the following one-line command and inspect its output:
FOR I=0,99 DO PRINT,I,X(I)
FOR I=0,99 DO PRINT,I,X[I] ;测试发现()和[]都可以
; Using the WHERE function:
; Define Q=2*X, then type FIND = WHERE(Q LE 40, COUNT)
; Examine the contents of FIND and COUNT so that you understand how the WHERE function operates.
Q=2*X ; 复制了一个数组,每个值都*2
FIND = WHERE(Q LE 40, COUNT) ; 遍历数组Q,把遍历结果赋值给FIND变量,同时用COUNT变量记录符合条件都个数
print , 'FIND=' , FIND
print , 'COUNT=' , COUNT
;PRINT,Q(FIND)
PRINT , 'Q(FIND):' , Q(FIND)
;Print to your terminal the values of the vector X/10
print , 'The values of the vector X/10 ' , x/10 ;结果说明是一个整形数组
;print the values of X/10.0 and compare the results
print , 'The values of X/10.0 ' , x/10.0 ;一个浮点型数组
;Do the same for FLOAT(X)/10 Do the same for FIX(X/10.0)
print , 'FLOAT(X)/10' , FLOAT(X)/10
print , 'FIX(X/10.0)' , FIX(X/10.0) ;表示把小数截去小数部分,只保留整数部分
;What is the difference between Z = X*0.0 and Z = 0?
print , 'Z = X*0.0 is ' , (x*0.0)
print , 'Z = 0 is ' , 0 ;一个是数组,一个是整数
;Print the 11 elements centered on X = 10
;First do this using a FOR loop (on a single line)
;Then do this using the standard IDL subscript range notation, e.g. X(2:6). No FOR loop is needed.
for i=x[5],x[15],1 do print , 'For Loop =>' , i
print , 'IDL subscript => ' , X(5:15)
;Compare to the following: K=5 & PRINT,X(10-K:10+K)
K=5 & PRINT,X(10-K:10+K)
;Define Y to be the subarray consisting of those 11 elements, using subscript range notation; print Y to your window as a check.
k=5
y=x(10-k:10+k)
print ,' Check y => ', y
;Verify lengths of X,Y using the N_ELEMENTS utility
print , 'The lengths of x =>' , N_ELEMENTS(x)
print , 'The lengths of y =>' , N_ELEMENTS(y)
;Use the SIZE utility to find the sizes of X and Y; what other info does it supply?
print , 'The sizes of x =>' , SIZE(x) ;1 100 2 100 表示一维 一维上有100个元素 整型 100个元素
print , 'The sizes of y =>' , SIZE(y)
;What information does the command HELP,X,Y provide?
;->Answer 输出 x y 的基本信息
HELP , x , y
;Define Q = Y+3 -- Note the values that Q contains
;Define Q = Y*3 -- Note the values that Q contains
;Define Q = Y^3 -- Note the values that Q contains
;Define Q = Y^4 -- Note the values that Q contains why are they not monotonic?
Q = Y + 3 & print , 'Y+3 =>' , Q
Q = Y - 3 & print , 'Y-3 =>' , Q
Q = Y * 3 & print , 'Y*3 =>' , Q
Q = Y ^ 4 & print , 'Y^4 =>' , Q ;int型最大到32767,产生溢出
Q = (long(Y) ^ 4) & print , 'Y^4 =>' , Q ;正确写法
;Define Q = FLOAT(Y)^4 -- Note the change.
Q = FLOAT(Y)^4 & print , 'FLOAT(Y)^4 =>' , Q ;浮点数范围正负10^38
;Print the vector which results from Q = X*Y
Q = x * y
print , 'Q = x * y =>' , Q
;What did IDL actually do to arrive at this result?
;->Answer 对x数组进行了截取
;Using the built-in functions TOTAL and N_ELEMENTS:
;Find and print the mean values of X and Y;
print , 'The mean values of X is' , TOTAL(x)/N_ELEMENTS(x)
print , 'The mean values of Y is' , TOTAL(y)/N_ELEMENTS(y)
;Find and print the variances of the two arrays
print , 'The variances of X is' , TOTAL((x-(TOTAL(x)/N_ELEMENTS(x)))^2)/(N_ELEMENTS(x)-1)
print , 'The variances of Y is' , TOTAL((y-(TOTAL(y)/N_ELEMENTS(y)))^2)/(N_ELEMENTS(y)-1)
;Do the same using the built-in functions MEAN and VARIANCE.
print , 'The mean values of X is' , MEAN(x)
print , 'The mean values of Y is' , MEAN(y)
print , 'The variances of X is' , VARIANCE(x)
print , 'The variances of Y is' , VARIANCE(y)
print , 'Test Moment x' , MOMENT(x)
print , 'Test Moment y' , MOMENT(y) ;计算平均值、方差、斜度、峰度
;write Q = X & Q[2] = Y. What will happen if you write Q[98] = Y? Try it.
Q = X
print , 'Q = x :' , Q
Q[2] = Y
print , 'Q[2] = y :' , Q
;Q[98] = Y
;print , 'Q[98] = y :' , Q ;溢出报错
;Q = [Y,Y] Q = [Q,Y]
Q = [Y,Y]
print , 'Q = [Y,Y]:' , Q
Q = [Q,Y]
print , 'Q = [Q,Y]:' , Q
;Create a 16-element vector [1.01, 1.02, 1.03...]
;using a simple one-line command employing FINDGEN. Verify.
x16 = (1 + FINDGEN(16))/100 + 1
print , 'x16=>' , x16
;Create a 16-element vector: [1,2,4,8,16....] using a simple
;one-line command employing FINDGEN. Verify.
y16 = 1 + FINDGEN(16)
print , 'y16=>' , y16
;Create the 100-element vector Z = 10*X - 0.1*X^2, where
;X contains the integers between 0 and 99.
x = INDGEN(100)
z = 10 * x - 0.1 * x ^ 2
print , 'z=>' , z
;Use MAX to determine the maximum value of Z.
print , 'The maximum value of Z' , MAX(Z)
;Use WHERE to locate the X value for which this maximum occurs.
FIND = WHERE(Z EQ MAX(Z))
print , ' The X value for which this maximum occurs is ' , FIND
;X was an integer vector but Z is not. Why?
;->Answer z在进行赋值的时候做了自动转换
;Using the SHIFT function, shift the elements of the array you
;just created three entries to the left. Verify that the
;maximum is now in the expected location.
z = SHIFT(z,-3)
print , ' The X value for which this maximum occurs is ' , WHERE(Z EQ MAX(Z))
END
这只是一个简单的介绍,用到的是很基本的函数,一些函数我在本站3S探秘版块也做过介绍,需要的请自行搜索,也可以留言。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子
你好,请问代码
OPENR,11,'D:\TEST.TXT'+'ORBIT_1.DAT'
里面的“+”代表什么?
字符串连接
&全报错,可能是因为;后面被视为注释的原因??全部改成&后就没问题了
是的,代码中&被转义了。
我把代码修正了一下,现在是没问题的了。