Matlab bsxfun()代码

时间:2011-03-21 19:35:08

标签: matlab bsxfun

这是做什么的?

u = [5 6];
s = [1 1];
data1    =[randn(10,1) -1*ones(10,1)];
data2    =[randn(10,1) ones(10,1)];
data     = [data1; data2];
deviance = bsxfun(@minus,data,u);  
deviance = bsxfun(@rdivide,deviance,s); 
deviance = deviance .^ 2; 
deviance = bsxfun(@plus,deviance,2*log(abs(s)));
[dummy,mini] = min(deviance,[],2);

在没有bsxfun的情况下,有没有相同的方法呢?

2 个答案:

答案 0 :(得分:3)

函数BSXFUN将通过复制两个输入参数的维度来执行所请求的逐元素操作(函数句柄参数),以使它们在大小上相互匹配。在这种情况下,您可以通过使用函数BSXFUN自己复制变量us来避免使用REPMAT,使它们的大小与{{1}相同}。然后,您可以使用标准element-wise arithmetic operators

data

答案 1 :(得分:2)

bsxfun执行二元操作元素。当您需要从矩阵中特定维度(在本例中为u)中的所有元素中减去向量(在本例中为data)时,它非常有用。在两种情况下,执行操作的维度必须匹配。对于您的示例,您可以将不带bsxfun的代码合并为

u1=repmat(u,size(data,2),1);
deviance=data-u1;

以及其他操作。