IDL高效编程技巧
2009-07-08 20:30
162 查看
1、 IDL提供一系列的内置函数和程序来执行常用的操作,这些系统内置的函数都是经过优化的,要比采用IDL编写的通过循环和下标操作来进行的同样功能的程序要快速。举例来说,对数组进行运算的时候,尽量不用使用循环而使用IDL内置的一些数组操作函数来实现。
2、 表达式的次序对执行的速度也有很大的影响:
考虑以下表达式:
B=A*16. /Max(A)
该表达式对A数组的每一元素乘上16,再对A数组的每一个元素再除以A数组的最大值。整个操作使用了两次A的数组元素。
更加快速的实现方法如下:
B=16./Max(A) *A
这种情况下只对A进行了一次运算就完成了整个操作。
3、 避免在循环内使用IF表达式,而使用逻辑数组运算
例如:
FOR I=0L, N_ELEMENTS(data)-1L DO $
IF (data[i] LE 30) THEN $
Data[i]=30
快速的实现方法为:
Dex=WHERE(data LE 30 ,n)
IF(n GT 0) THEN data[dex]=30
更快的实现方法为:
Data=(data GT 30) *data+(data LE 30)*30
最快的实现方法为:
Data=data >30
4、 在循环中移除不变的表达式
5、 在使用BYTARR, COMPLEXARR, DCOMPLEXARR, FLTARR, INTARR, LONARR, MAKE_ARRAY, OBJARR
, 以及PTRARR创建数组是加上NOZERO关键字,防止数组默认填零,可使速度加快
。
6、 在处理大的数组时,使用TEMPORARY函数来最小化内存需求。
A=TEMPORARY(A)+1
7、 函数的调用有很大的开销,尽量避免使用只有一行的函数。
8、 在不使用指针和对象后,及时清除它们。
2、 表达式的次序对执行的速度也有很大的影响:
考虑以下表达式:
B=A*16. /Max(A)
该表达式对A数组的每一元素乘上16,再对A数组的每一个元素再除以A数组的最大值。整个操作使用了两次A的数组元素。
更加快速的实现方法如下:
B=16./Max(A) *A
这种情况下只对A进行了一次运算就完成了整个操作。
3、 避免在循环内使用IF表达式,而使用逻辑数组运算
例如:
FOR I=0L, N_ELEMENTS(data)-1L DO $
IF (data[i] LE 30) THEN $
Data[i]=30
快速的实现方法为:
Dex=WHERE(data LE 30 ,n)
IF(n GT 0) THEN data[dex]=30
更快的实现方法为:
Data=(data GT 30) *data+(data LE 30)*30
最快的实现方法为:
Data=data >30
4、 在循环中移除不变的表达式
5、 在使用BYTARR, COMPLEXARR, DCOMPLEXARR, FLTARR, INTARR, LONARR, MAKE_ARRAY, OBJARR
, 以及PTRARR创建数组是加上NOZERO关键字,防止数组默认填零,可使速度加快
。
6、 在处理大的数组时,使用TEMPORARY函数来最小化内存需求。
A=TEMPORARY(A)+1
7、 函数的调用有很大的开销,尽量避免使用只有一行的函数。
8、 在不使用指针和对象后,及时清除它们。
相关文章推荐
- python高效编程技巧10(如何读写json)
- Python高效编程技巧
- Python高效编程技巧
- 良好的编程习惯和高效的编程技巧
- Python高效编程技巧
- C语言高效编程的的四招技巧
- Python高效编程技巧
- TCPIP高效编程-改善网络程序的44个技巧[PDF]
- Python高效编程技巧
- python高效编程技巧14(如何使用线程池)
- QT高级编程技巧(一)-- 编写高效的signal & slot通信代码
- [转载]Python高效编程技巧
- Python高效编程技巧
- 嵌入式高效编程小技巧
- Python高效编程技巧 | 外刊IT评论网
- C语言高效编程的的四招技巧
- Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据
- python高效编程技巧1 (如何在列表,字典,集合中根据条件筛选数据)
- 一些高效嵌入式ARM开发的编程技巧
- C语言高效编程的的四招技巧