



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序的效率问题,在大数据或复杂运算的时候是不能忽略的。但在IDL程序的编写方式上,不能按照常规的循环 for依次处理方式写,简单归纳下,提高效率的运行的写法注意下 面两种方式。1、尽量避免或少用循环2、多用 where 和 Histogram;说起来很容易,但实际写的时候一定要多斟酌斟酌。 举例1:对2000*2000的数组中大于100的值进行累加。 PRO TEST_TIME ;a = DIST ( 2000 , 2000 ) sum =0.sum1 =0.start = SYSTIME ( 1) FOR i= 0L , N_ELEMENTS (a)- 1L DO BEGIN IF (ai
2、GT 100.0 ) THEN BEGIN sum = sum +aiENDIF ENDFOR fortime = SYSTIME ( 1 )-start PRINT , for time: fortime i= 0L start = SYSTIME ( 1) WHILE i LT N_ELEMENTS (a)- 1L DO BEGINIF (ai GT 100.0 ) THEN sum = sum +ai i+ ENDWHILE whiletime = SYSTIME ( 1 )-start PRINT , while time: ,whiletime start = SYSTIME ( 1
3、) sum = TOTAL (a * (a GT 100.0 ) funtime = SYSTIME ( 1 )-start PRINT , function time:,funtime;倍数 print , result for VS function:, fortime/funtimeprint , result while VS function:,whiletime/funtimeEND 运行后的输出 IDL test_time % Compiled module: TEST_TIME. for time: 1.4510000 while time: 2.0430000 functio
4、n time: 0.0 result for VS function: 26.870301 result while VS function: 37.833235看到差别了吧,循环比函数直接运算慢至少一个数量级!举例2:对一个图像中的特定值,若存在,则以该像素为中心,特定半径内的元素统一修改 为某值。以IDL自带的一个图像为例,将数据值等于142的赋为0.源码如下::;;计算两个点的距离;function CalDistance , pointl, point2compile_optidl2Return , SQRT(point1end;0-point20)A 2+(point1 1 -poi
5、nt21)A 2)搜索当前坐标周围 Distance 内的下标,注意输入 x和y方向的坐标范围xRange和yRangefunctioncalldxInDistance,curLoc, distance;,xRange,yRange;初始化临时下标suitLoc = 0, 0;循环一次,计算矩形范围内的符合要求下标for xLoc = curLoc 0-distance, curLoc0+distance do beginfor yLoc = curLoc1 -distance, curLoc1 +distancedo beginif calDistance (curLoc, xLoc,yLo
6、c)LE distance then suitLoc =suitLoc,xLoc,yLoc endfor end ; return , suitLoc*, 1:( N_Elements (suitLoc)/ 2-1) end ; ; ;测试即调用主函数 pro test_process ;原数据 file = FILEPATH ( rbcells.jpg , $ SUBDIRECTORY = examples , data) READ_JPEG , file, data ; if size (data,/n_dimensions)ne 2 then returndims =size (data
7、,/dimension)startTime =systime(1);当值等于142时,半径5内的元素赋值为0eqValue =142repValue = i;符合要求的坐标suitIdx =calldxInDistance(0, 0, 5);新数据nData = dataidxs =where (data eq eqValue,count)for curldx =0 ,count- 1 do beginnSuit = suitIdxsuitLoc =ARRAY_INDICES (data, idxscurIdx)nSuit0,*= nSuit0 ,*+suitLoc0nSuit1 ,*= nS
8、uit;下标要在数组自身范围内1 ,*+suitLoc1nSuit0 ,* = dims0 nSuit1 ,* = dims;符合要求的位置赋值1 000,*,nSuit1 ,* = repValue;转换为二维坐标nDatanSuit endfor;输出花费时间 print , systime;常规的循环写法(1) - startTimens = dims nl = dims01new = datanew1 = datastartTime =for i= 0 ,ns-systime ( 1)1 do beginfor j= 0 ,nl- if newi,j1 doeqfor m= 0,ns- 1begineqValue then begin do beginfor n= 0,nl-if (m-i*endfor1 do begin1L2+(n-j*1L)A 2 le25then new1m,n= 0endforendifendforendfor1print , common time: window , 1 ,xSize = dims tvscl ,Data, 0,systime (1) - startTime 0* 2,ySize = dims0* 2,ySize = dims1tvscl ,ndata, 1window , 2 ,xSi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商务活动中的礼仪处理能力测试题及答案
- 食堂节能节水与减排技术张志勇简
- 【+高中语文+】《荷塘月色》课件+统编版高一语文必修上册
- 202A劳动合同样本「标准」
- 湖北工业大学《西方文论Ⅱ》2023-2024学年第二学期期末试卷
- 河北正定师范高等专科学校《PHP动态网站开发》2023-2024学年第二学期期末试卷
- 苏州卫生职业技术学院《舞蹈鉴赏与批评》2023-2024学年第一学期期末试卷
- 重庆移通学院《新型遥感信息处理与应用技术》2023-2024学年第一学期期末试卷
- 2025年辽宁省丹东市重点中学高中高三联考语文试题含解析
- 合同会签单审批意见(2025年版)
- 2022年4月自考00152组织行为学试题及答案含解析
- 【中医药文化对外传播探究文献综述3700字(论文)】
- 科目三新规教学大纲
- 血液透析室患者接诊制度
- 业余足球俱乐部数据统计表
- 初中八年级历史-八年级历史下册伟大的历史转折之中共十一届三中全会
- 初中数学-图形的平移教学设计学情分析教材分析课后反思
- 【复习资料】01180电视采访(复习提分要点)
- 2023年国家工信部信息中心事业单位招聘笔试参考题库(共500题)答案详解版
- JGT266-2011 泡沫混凝土标准规范
- 合理自我分析报告RSA
评论
0/150
提交评论