1. 程式人生 > >Matlab中用到的bsxfun函式

Matlab中用到的bsxfun函式

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