【IDL】 IDL 8.2.2(SP2)新特性

地理遥感生态网平台發表於2024-06-28

IDL 8.2.2為IDL圖形進行了一些功能改進,新增了幾個函式過程和一個系統變數,提供了Widget元件程式設計的新特性,極大地提升瞭如PLOT等函式的啟動速度。並簡化了ENVI自定義工具的建立。工作臺編輯器的功能有了改進和增加。

1. 新增IDL技巧專題

IDL8.2.2幫助中新增了一個技巧專題。此專題在以後會一直進行擴充,可以幫助使用者編寫的程式更加簡單高效。

2. 新增函式

2.1 BOXPLOT

現在可以使用BOXPLOT函式繪製箱線圖。如圖所示,提供一個N列5行的陣列(其中N為繪製圖形個數),每一列對應一個圖形,5個元素分別對應圖中箭頭所示位置的Y值。

你可以自定義輸入陣列的值,也可以使用CREATEBOXPLOTDATA函式自動生成。

【IDL】 IDL 8.2.2(SP2)新特性
圖:BoxPlot函式示例

2.2 CREATEBOXPLOTDATA

顧名思義,CreateBoxPlotData函式是為BoxPlot函式建立資料的。自動計算輸入陣列每一列的最小值(排除可能的異常值)、下四分之一值、中值、上四分之一值、最大值(排除可能的異常值)。

bike_mph = [ $
[12.2, 16.2], $
[12.1, 16.4], $
[10.7, 16.9], $
[11.6, 17.0], $
[10.2, 16.5], $
[10.9, 16.1], $
[11.8, 17.1], $
[10.9, 100.0], $    ;存在一個異常值100.0,看結果已經排除此異常值,最大值為17.50
[12.4, 16.8], $
[12.9, 16.9], $
[13.1, 17.5], $
[13.0, 17.4]]
bpd = CREATEBOXPLOTDATA(bike_mph, MEAN_VALUES=means, OUTLIER_VALUES=outliers)
PRINT, bpd
 10.200000      16.100000
 10.900000      16.424999
 11.950001      16.900000
 12.775000      17.324999
 13.100000      17.500000

2.3 IMAGE_THRESHOLD

IMAGE_THRESHOLD函式返回一個二值影像,大於閾值則為1,小於閾值則為0。可選的自動閾值演算法有:Isodata、Otsu、Moments、Maxentropy、Minerror和Mean。如圖所示,上圖為原始影像,下圖為返回的二值影像。

【IDL】 IDL 8.2.2(SP2)新特性

圖:IMAGE_THRESHOLD函式示例

2.4 SCATTERPLOT和SCATTERPLOT3D

SCATTERPLOT和SCATTERPLOT3D函式可以繪製二維和三維散點圖。

【IDL】 IDL 8.2.2(SP2)新特性

圖:SCATTERPLOT函式示例

2.5 TIC和TOC

TIC和TOC程式可以獲取IDL程式的執行時間。TIC程式可以被用作過程或函式。當TIC被當作過程呼叫時,TIC和TOC可以輸出被呼叫之間的執行時間。當TIC被用作函式呼叫時,TOC程式可以計算TIC指定過程的執行時間。這樣便可以計運算元程式和迴圈內的執行時間。TIC和TOC程式同樣可以被用來啟動和禁止IDL程式碼分析器。

3. 其他更新內容

新增 !CONST 系統變數

!CONST系統變數格式為IDL結構體,包含了常用的物理常數。例如,使用裡德伯常量計算氫原子躍變放射出的光波長。

【IDL】 IDL 8.2.2(SP2)新特性

首先核查裡德伯常量的值:

PRINT, !CONST.me*!CONST.ev^4/(8*!CONST.eps0^2*!CONST.h^3*!CONST.c)
PRINT, !CONST.Rydberg
IDL prints:
10973732.
10973732.

現在計算從n=2到基態的轉換:

PRINT, 1e9/(!CONST.Rydberg*(1 - 1./4)), " nm"
IDL prints:
121.50227 nm

獲取隨機數演算法改進

RANDOMU和RANDOMN函式現在使用Mersenne Twister演算法來生成隨機數。Mersenne Twister演算法相對舊版隨機數生成器來說,是一個重大改進。

如果想要使用舊版演算法,可以使用RAN1關鍵字。

Graphics: CURRENT關鍵字升級

CURRENT關鍵字升級了,使用者可以指定此關鍵字等於已經存在的圖形視窗,則指定的圖形視窗自動變為當前視窗。

Graphics: 帶投影圖片顯示改進

當顯示影像具有地圖投影時,IDL自動設定影像的地圖範圍。同樣可以新增顯示Box Axes,而不需要手動計算範圍。

【IDL】 IDL 8.2.2(SP2)新特性

圖:顯示影像在某地圖投影下,可以自動新增Box Axes

Graphics: 顯示地圖視界

現在可以顯示所有地圖投影型別的邊界。MAP和MAPGRID函式有三個相關屬性:HORIZON_COLOR、HORIZON_LINESTYLE和HORIZON_THICK。例如:

; Create a map using the interrupted Goode projection.
mGoode = MAP('Interrupted Goode', FILL_COLOR='light blue', $
HORIZON_COLOR='red', HORIZON_THICK=3, TITLE='Interrupted Goode')
mc = MAPCONTINENTS(/FILL_BACKGROUND, FILL_COLOR='gray')

【IDL】 IDL 8.2.2(SP2)新特性

圖:地圖視界顯示示例

Graphics: POSITION屬性

在所有圖形物件中新增了新的POSITION屬性。在之前的版本,只能對“main”影像函式使用POSITION屬性,例如PLOT、CONTOUR。在建立時,POSITION可以被設定為含有4個元素的向量,[X1, Y1, X2, Y2],分別對應了左下角和右上角的座標。如果設定為2個元素的向量,則為要顯示圖形的中心點位置。

Graphics: 速度提升

所有圖形函式的啟動速度有了極大的提升。其中,利用硬體渲染明顯提升了PLOT函式的速度,特別是在繪製大資料量的點時。例如:

;IDL8.2.2版本測試程式碼
n = 1e6
x = RANDOMU(seed, n)
PRINT, 'Graphics functions:'
FOR i=0,2 DO BEGIN & TIC & p = PLOT(x) & TOC & p.CLOSE & ENDFOR
PRINT, 'Direct graphics:'
FOR i=0,2 DO BEGIN & TIC & PLOT, x & TOC & WDELETE & ENDFOR
 
;IDL8.0及之前版本測試程式碼
n = 1e6
x = RANDOMU(seed, n)
PRINT, 'Graphics functions:'
FOR i=0,2 DO BEGIN & start = systime(1) & p = PLOT(x) & print, systime(1)-start & p.CLOSE & ENDFOR
PRINT, 'Direct graphics:'
FOR i=0,2 DO BEGIN & start = systime(1) & PLOT, x & print, systime(1)-start & WDELETE & ENDFOR

IDL8.2.2 prints:

Graphics functions:
% Time elapsed: 2.3860002 seconds.
% Time elapsed: 2.1719999 seconds.
% Time elapsed: 2.1790001 seconds.
Direct graphics:
% Time elapsed: 0.73799992 seconds.
% Time elapsed: 0.64499998 seconds.
% Time elapsed: 0.63299990 seconds.

IDL8.0 prints:

Graphics functions:
      17.503000
      7.6090000
      7.4710000
Direct graphics:
     0.67799997
     0.64600015
     0.65400004

IDLgrPlot: 新的直方圖樣式

使用IDLgrPlot物件時,設定HISTOGRAM = 2可以超出資料的範圍。或設定HISTOGRAM = 3,將水平線的起始點落在每一個X位置,而不是中心位置。

PLOT和BARPLOT: 新的直方圖樣式

PLOT和BARPLOT函式均新增了新的HISTOGRAM屬性。區別在於直方圖的起始點位置不同。如下面的例子所示。

h = HISTOGRAM(5*RANDOMU(1,25), BINSIZE=1, MIN=0.0, LOCATIONS=loc)
ex = {THICK:2, XRANGE:[-0.5,5.5], YRANGE:[0,10], $
XMINOR:0, XTICKLEN:0.02, YMINOR:0, YTICKLEN:0.02}
p1 = PLOT(loc, h, /STAIRSTEP, LAYOUT=[2,2,1], $
_EXTRA=ex, XTITLE='Plot Stairstep')
p2 = PLOT(loc, h, /HISTOGRAM, LAYOUT=[2,2,2], $
_EXTRA=ex, /CURR,XTITLE='Plot Histogram')
p3 = BARPLOT(loc, h, LAYOUT=[2,2,3], _EXTRA=ex, $
/CURR,XTITLE='Barplot Default')
p4 = BARPLOT(loc, h, LAYOUT=[2,2,4], _EXTRA=ex, $
/CURR, /HISTOGRAM, XTITLE='Barplot Histogram')

【IDL】 IDL 8.2.2(SP2)新特性

圖:PLOT和BarPlot新的直方圖樣式

ROUTINE_FILEPATH函式改進

如果呼叫時不輸入任何引數,將自動返回當前原始碼檔案的完整路徑。這在讀取與原始碼檔案相同路徑下的資料時非常有用。

工作臺編輯器自動補全塊語句

當使用塊語句時,輸入語句最後一詞為“begin”時,按回車會自動補齊“end”。支援的塊語句包括:IF/ENDIF、FOREACH/ENDFOREACH、 FOR/ENDFOR、ELSE/ENDELSE、WHILE/ENDWHILE、 CASE/ENDCASE、SWITCH/ENDSWITCH和REPEAT/ENDREP。自動補全的“end”與“begin”具有相同的格式(如全大寫、小寫、首字母大寫等)。

如,當輸入“IF 1 then begin”後回車,自動在後邊補齊ENDIF。

可以在IDL首選項中設定是否自動補全。如圖中紅框位置。

【IDL】 IDL 8.2.2(SP2)新特性

圖:設定是否自動補全塊語句

工作臺編輯器自動格式化

IDL工作臺的編輯器內貼上一行或多行語句時,編輯器自動應用預設的格式。相對於之前版本中,等同於貼上程式碼後點選原始碼→格式。

可透過IDL首選項中設定是否使用此功能,如上圖中藍色框中所示位置。

相關文章