poster
2019-12-14, 20:46
这是做什么的?
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 (http://www.mathworks.com/help/techdoc/ref/bsxfun.html)函数将通过复制两个输入参数的尺寸以使其大小相互匹配来执行请求的按元素操作(函数句柄参数)。在这种情况下,可以通过使用函数REPMAT (http://www.mathworks.com/help/techdoc/ref/repmat.html)复制变量u和s来使变量和data大小相同,从而避免使用BSXFUN (http://www.mathworks.com/help/techdoc/ref/bsxfun.html) 。然后,您可以使用标准的按元素算术运算符 (http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html) :
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
更多&回答... (https://stackoverflow.com/questions/5382654)
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 (http://www.mathworks.com/help/techdoc/ref/bsxfun.html)函数将通过复制两个输入参数的尺寸以使其大小相互匹配来执行请求的按元素操作(函数句柄参数)。在这种情况下,可以通过使用函数REPMAT (http://www.mathworks.com/help/techdoc/ref/repmat.html)复制变量u和s来使变量和data大小相同,从而避免使用BSXFUN (http://www.mathworks.com/help/techdoc/ref/bsxfun.html) 。然后,您可以使用标准的按元素算术运算符 (http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html) :
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
更多&回答... (https://stackoverflow.com/questions/5382654)