Matlab中用到的bsxfun函式
阿新 • • 發佈:2019-02-04
bsxfun函式
最近在讀dollar toolbox程式碼,該工具包是用matlab和c混編的,對其中的很多matlab函式不是很熟悉,有的更是查了忘,再見到再查,所以就在這裡,邊學習邊整理,方便以後學習。
一、bsxfun函式是對矩陣中每個元素進行操作的函式,函式形式是C = bsxfun(fun,A,B),fun是代表要執行的運算,可以是下圖中的任何一個,比如@plus
例1:
a=[1 2 3];
c=[1.1;1.9;3.1];
v=bsxfun(@min,a,c);
執行結果:
:
@min從名字上就可以看出,是比較大小,問題在於怎麼比較,其實,它的比較規則跟錯c*a是一樣的,也就是和[1 2 3]*[1.1;1.9;3.1]規則一樣,只不過對應元素不進行乘法運算,而是進行min,即取最小運算。
例2:
v就是例1的結果。@times是乘法運算,這裡矩陣v和矩陣xstep都是3*3的,所以執行的就是對應元素相乘。
暫時只用到這兩個函式,其它的函式應該都差不多的,有空可以試一下。
>> a=[1,2,3] a = 1 2 3 >> b=[1.1 1.9 3.1] b = 1.1000 1.9000 3.1000 >> c=b' c = 1.1000 1.9000 3.1000 >> v=bsxfun(@min,a,c) v = 1.0000 1.1000 1.1000 1.0000 1.9000 1.9000 1.0000 2.0000 3.0000 >> x=bsxfun(@times,v,10) x = 10 11 11 10 19 19 10 20 30 >> xstep=[10 10 10;100 100 100;1000 1000 1000] xstep = 10 10 10 100 100 100 1000 1000 1000 >> x=bsxfun(@times,v,xstep) x = 10 11 11 100 190 190 1000 2000 3000 >> m=bsxfun(@min,a,b) m = 1.0000 1.9000 3.0000 >> k=bsxfun(@minus,x,xstep) k = 0 1 1 0 90 90 0 1000 2000 >> clear >> a=[1 2 3;4 5 6;4 2 1] a = 1 2 3 4 5 6 4 2 1 >> xMin=min(a) xMin = 1 2 1 >> xMax=max(a) xMax = 4 5 6 >> cha=bsxfun(@minus,a,xMin) cha = 0 0 2 3 3 5 3 0 0 >> xStep=(xMax-xMin)/10 xStep = 0.3000 0.3000 0.5000 >> a0=bsxfun(@times,cha,1./xStep) a0 = 0 0 4 10 10 10 10 0 0