matlab函數(shù) bsxfun淺談

2017-01-17  by:CAE仿真在線  來源:互聯(lián)網(wǎng)

matlab函數(shù) bsxfun淺談(轉載)

matlab函數(shù) bsxfun淺談

標簽:

matlab

bsxfun

雜談

分類: matlab

網(wǎng)上關于bsxfun的東西不多,今天需要看到一個,由于原博文插入的圖片顯示不出來,于是筆者大發(fā)善心進行了contrl+V 以及alt+ctrl+A的操作,供大家交流學習。

bsxfun是一個matlab自版本R2007a來就提供的一個函數(shù),作用是”applies an element-by-element binary operation to arrays a and b, with singleton expansion enabled.”

舉個例子。假設我們有一列向量和一行向量。

a = randn(3,1), b = randn(1,3) a = -0.2453 -0.2766 -0.1913 b = 0.6062 0.5655 0.9057 我們可以很簡單的使用matlab的外乘c=a*b來得到,如圖
matlab函數(shù) <wbr>bsxfun淺談(轉載)
但如果我們想用”外加”呢?也就是說把上式求解過程中的乘號換做加號?
這時我們可以用c=bsxfun(@plus,a,b)來實現(xiàn)。 bsxfun的執(zhí)行是這樣的,如果a和b的大小相同,那么c=a+b. 但如果有某維不同,且a或b必須有一個在這一維的維數(shù)為1, 那么bsxfun就將少的這個虛擬的復制一些來使與多的維數(shù)一樣。在我們這里,b的第一維只有1(只一行),所以bsxfun將b復制3次形成一個3×3的矩陣,同樣也將a復制成3×3的矩陣。這個等價于c=repmat(a,1,3)+repmat(b,3,1)。這里 repmat(a,1,3) ans = -0.2453 -0.2453 -0.2453 -0.2766 -0.2766 -0.2766 -0.1913 -0.1913 -0.1913 repmat是顯式的復制,當然帶來內存的消耗。而bsxfun是虛擬的復制,實際上通過for來實現(xiàn),等效于for(i=1:3),for(j=1:3),c(i,j)=a(i)+b(j);end,end。但bsxfun不會有使用matlab的for所帶來額外時間。實際驗證下這三種方式 >> c = bsxfun(@plus,a,b) c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144 >> c = repmat(a,1,3)+repmat(b,3,1) c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144 >> for(i=1:3),for(j=1:3),c(i,j)=a(i)+b(j);end,end,c c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144 從計算時間上來說前兩種實現(xiàn)差不多,遠高于for的實現(xiàn)。但如果數(shù)據(jù)很大,第二種實現(xiàn)可能會有內存上的問題。所以bsxfun最好。 這里@plus是加法的函數(shù)數(shù)柄,相應的有減法@minus, 乘法@times, 左右除等,具體可見 doc bsxfun.

開放分享:優(yōu)質有限元技術文章,助你自學成才

相關標簽搜索:matlab函數(shù) bsxfun淺談 MatLab培訓 MatLab培訓課程 MatLab在線視頻教程 MatLab技術學習教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎知識 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓 Abaqus培訓 

編輯
在線報名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復電話,謝謝!
驗證碼

全國服務熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com