查看单个帖子
旧 2019-12-14, 20:46   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 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,有没有做到这一点的等效方法?



回答:

BSXFUN函数将通过复制两个输入参数的尺寸以使其大小相互匹配来执行请求的按元素操作(函数句柄参数)。在这种情况下,可以通过使用函数REPMAT复制变量u和s来使变量和data大小相同,从而避免使用BSXFUN 。然后,您可以使用标准的按元素算术运算符

u = repmat(u,size(data,1),1); %# Replicate u so it becomes a 20-by-2 array s = repmat(s,size(data,1),1); %# Replicate s so it becomes a 20-by-2 array deviance = ((data-u)./s).^2 + 2.*log(abs(s)); %# Shortened to one line

更多&回答...
poster 当前离线   回复时引用此帖