版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、MatLab 向量化技巧家家 2007-05-17 13:53大家都知道MatLab是一種解釋性語言,它的長處在矩陣運算。因此需要將問題盡量用矩陣表示,并且要避免對單個矩陣元素操作,而用整體矩陣運算。一個重要過程就是所謂將問題矢量化(vectorizing)。一個問題是如果需要對矩陣的不同元素作不同操作,那么怎么辦?舉個例子對矩陣X,作A=5*sin(X)/X,顯然當(dāng)X某元素-0時,A對應(yīng)元素-5。按照通常在其他語言思路編程為:Nx=2000;X=2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;%生成NxXNx矩陣X,一半為隨機分布,一半為0。A=zeros(
2、Nx,Nx);form=1:Nxforn=1:Nxif(abs(X(m,n)=eps)A(m,n)=5.0.*sin(X(m,n)./X(m,n);elseA(m,n)=5.0;endendend%(ProgramNo.1)以上代碼通過循環(huán)語句對每一個矩陣元素進行單獨操作,這段代碼在MatLab里效率特別低。為避免循環(huán),考慮如下方法:方法I:用所謂logicalsubscripting。Nx=2000;X=2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;A=zeros(Nx,Nx);I=(abs(X)=eps);A=I.*5.0.*sin(X)./(X+(1-
3、I)+(1-I).*5.0;%(ProgramNo.2)或者上面最后一行用如下代碼代替:A(I)=5.0.*sin(X(I)./X(I);A(I)=5.0;%(ProgramNo.3)一個看起來更有效的辦法是先生成一個所有元素都是5的A矩陣。代碼如下:Nx=2000;X=2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;A=5.0;A=A(ones(Nx,Nx);%用Tonystrick生成矩陣A,所有元素=5I=(abs(X)=eps);A(I)=5.0.*sin(X(I)./X(I);%(ProgramNo.4)方法II:用find函數(shù)。Nx=2000;X=
4、2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;A=5.0;A=A(ones(Nx,Nx);I=find(abs(X)=eps);A(I)=5.0.*sin(X(I)./X(I);%(ProgramNo.5)我在P41.6G,512MDDR266上作了個測試,每個程序執(zhí)行5遍,選最小執(zhí)行時間:ProgramNo.time(s)171.2023.3132.6442.8053.22顯然ProgramNo.3是最快的。如果X矩陣中0元素很少,那么ProgramNo.2、ProgramNo.3以及ProgramNo.4的執(zhí)行時間會非常接近。大家可以用profiler分
5、析每一個語句所用時間情況。以上是我用過的兩種方法,有沒有更有效的方法呢?還有個問題就是,如何將主對角元素的Index加入到變量I中?例如需要將滿足abs(X)1)if (mod(n,2)=1) n=n*3+1;elseif(mod(n,2)=0) n=n/2;else break;endendf=n;驗證1:, 以前我們可能這樣做:代碼:a=zeros(1,);for k=1:a(k)=jiaogu(k);endall(a)現(xiàn)在我們只需這樣:代碼:all(arrayfun(jiaogu,1:)舉這兩個例子目的是為了讓大家知道很多以前不能優(yōu)化的程序利用這個函數(shù)還可以進一步優(yōu)化。具體了解請doc
6、arrayfun 。另外cellfun和structfun也提供了類似的功能,關(guān)于其用法,幫助文檔里寫的很詳細(xì)。向量化操作的又一重要函數(shù)accumarray的用法總結(jié)向量化編程是MATLAB編程區(qū)別于其他語言的最重要特征之一,MATLAB不斷增強其向量化編程的能力。版本7以后出現(xiàn)的accumarray函數(shù)就是一個很好的例子。accumarray函數(shù)最早出現(xiàn)于7.0版(R14),在隨后的7.1 (R14SP3), 7.2 (R2006a)版里又對其功能進行增強。大家可以在幫助文檔里了解其基本信息,這里結(jié)合自己的使用經(jīng)驗給出其用法的舉例,大家可以看看其效果。例1:生成一個*1的向量,其元素服從1,
7、之間離散均勻分布,找出都有哪些元素出現(xiàn)了a=unidrnd(,1);方法1:tic;b=union(a,a);toc;Elapsed time is 0. seconds.方法2:tic;c=unique(a);toc;Elapsed time is 0. seconds.方法3tic,d=accumarray(a,1,1);e=find(d);tocElapsed time is 0. seconds.d 給出了每個元素出現(xiàn)的個數(shù),如果還需要這方面的信息,無疑方法3占絕對優(yōu)勢。例2:在1000*1000的正方形區(qū)域內(nèi)隨機生成個點(坐標(biāo)值是整數(shù)),統(tǒng)計每個坐標(biāo)點上生成的點的個數(shù)。在這個例子下,
8、像例1一樣簡單應(yīng)用union和unique就不行了。通常我們考慮用循環(huán):p=unidrnd(1000,2);tic;A=zeros(1000);for k=1:A(p(k,1),p(k,2)=A(p(k,1),p(k,2)+1;endtocElapsed time is 0. seconds.而用accumarray,可以這樣: tic;a=accumarray(p,1,1000,1000);tocElapsed time is 0. seconds. isequal(A,a)ans = 1速度整整提高了10倍。例3:1000人,身高分布在170-180,體重在110-200斤,年齡分布在20
9、-50歲,計算身高體重都相等的人的年齡平均值。結(jié)果用矩陣表示:行數(shù)表示身高,列數(shù)表示體重,元素表示年齡的平均值。首先生成數(shù)據(jù):rand(state,0)height=unidrnd(10,1000,1)+170;rand(state,0)weight=unidrnd(90,1000,1)+110;rand(state,0)old=unidrnd(30,1000,1)+20;利用accumarray計算的語句如下:tic;mo=accumarray(height,weight,old,mean);tocElapsed time is 0. seconds.這個矩陣比較稀疏也可以結(jié)果用稀疏矩陣來表示tic;mo=accumarray(height,weight,old,m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024學(xué)年九年級物理上冊 第5章 歐姆定律 5.2測量電阻教學(xué)設(shè)計 (新版)教科版
- 八年級道德與法治上冊 第二單元 青春自畫像 第七課 青春相冊 第2框 優(yōu)勢互補教學(xué)設(shè)計 人民版
- 遼寧省大連市高中化學(xué) 第二章 烴和鹵代烴 2.1 脂肪烴 2.1.2 烯烴 乙烯教案 新人教版選修5
- 高中政治 第二單元 為人民服務(wù)的政府 4.1 政府的權(quán)力:依法行使教案 新人教版必修2
- 八年級物理上冊 第四章 第三節(jié) 平面鏡成像教案 (新版)新人教版
- 九年級化學(xué)上冊 3.4 物質(zhì)組成的表示式教案2 (新版)粵教版
- 3.1維護秩序 同步課件-2024-2025學(xué)年統(tǒng)編版道德與法治八年級上冊
- 高中化學(xué) 第三單元 化學(xué)與材料的發(fā)展 課題1 無機非金屬材料教案1 新人教版選修2
- 貨物交付合同模板具體
- 短期物業(yè)保安合同模板
- SH/T 3227-2024 石油化工裝置固定水噴霧和水(泡沫)噴淋滅火系統(tǒng)技術(shù)標(biāo)準(zhǔn)(正式版)
- 我一支鉛筆的故事
- 2024年采油工(中級)職業(yè)技能考試題庫(含答案)
- 2024年中國氣象局人工影響天氣中心招聘高校應(yīng)屆畢業(yè)生歷年公開引進高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 2024年中國醫(yī)藥集團有限公司招聘筆試沖刺題(帶答案解析)
- 2022年版初中歷史課程標(biāo)準(zhǔn)新課標(biāo)考試題庫及答案1
- (正式版)JBT 7248-2024 閥門用低溫鋼鑄件技術(shù)規(guī)范
- YY/T 0331-2024脫脂棉紗布、脫脂棉粘膠混紡紗布的性能要求和試驗方法
- 多重耐藥菌病人的管理-(1)課件
- 2023年12月江蘇省啟東市高新區(qū)(近海鎮(zhèn))公開招錄7名村干部筆試近6年高頻考題難、易錯點薈萃答案帶詳解附后
- 2024年01月廣西桂林醫(yī)學(xué)院招考聘用筆試歷年高頻考題(難、易錯點薈萃)答案帶詳解附后
評論
0/150
提交評論