首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab的bsxfun()代码

Matlab的bsxfun()代码
EN

Stack Overflow用户
提问于 2011-03-22 03:35:08
回答 2查看 3.8K关注 0票数 3

这是做什么的?

代码语言:javascript
复制
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的等效方法呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-22 03:49:33

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

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2011-03-22 03:51:33

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

代码语言:javascript
复制
u1=repmat(u,size(data,2),1);
deviance=data-u1;

对于其他操作,依此类推。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5382654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档