MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   Matlab的bsxfun()代码 (https://www.labfans.com/bbs/showthread.php?t=26680)

poster 2019-12-14 20:46

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,有没有做到这一点的等效方法?



[B]回答:[/B]

[URL="http://www.mathworks.com/help/techdoc/ref/bsxfun.html"]BSXFUN[/URL]函数将通过复制两个输入参数的尺寸以使其大小相互匹配来执行请求的按元素操作(函数句柄参数)。在这种情况下,可以通过使用函数[URL="http://www.mathworks.com/help/techdoc/ref/repmat.html"]REPMAT[/URL]复制变量u和s来使变量和data大小相同,从而避免使用[URL="http://www.mathworks.com/help/techdoc/ref/bsxfun.html"]BSXFUN[/URL] 。然后,您可以使用标准的按[URL="http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html"]元素算术运算符[/URL] :

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

[url=https://stackoverflow.com/questions/5382654]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:22

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.