bsxfun()函数 很好用:
applies an element-by-element binary operation (
specified by the functionhandlefun
) to arrays a and b, with singleton expansion enabled
函数功能:两个数组间元素逐个计算的二值操作
使用方法:C=bsxfun(fun,A,B);
两个数组A和B间元素逐个计算的二值操作,fun是函数句柄或者m文件,也可以是内置函数(eg.@plus等,见 最后表格)
例子:
%% 一行为一个样本,一列为一个维度,求向量 “零均值”
A=[1 2 10;1 4 20;1 6 15];
C=bsxfun(@minus,A,mean(A)); %%(equal to) C=A-repmat(mean(A,1),3,1));
%% 求两个向量"外加"(A为1*3行向量,B为3*1列向量)
a=randn(3,1);
b=randn(1,3);
c=a*b; %%(=>) c=bsxfun(@plus,a,b); <pre name="code" class="cpp">%%(=>) c=repmat(a,1,3)+repmat(b,3,1);
%%(=>) for(i=1:3),for(j=1:3),c(i,j)=a(i)+b(j);end,end
repmat是显式的复制,带来内存消耗;bsxfun是虚拟的复制,实现上等同于for,但bsxfun与for相比不会带来额外时间。
总结:
C = bsxfun(fun,A,B) 中 fun 可以是 oneof the