bsxfun:被连接的矩阵的维度不一致



有人知道错误在哪里吗?非常感谢!

beta=randn(50,1);
bsxfun(@(x1,x2) max([x1 x2 x1+x2]), beta, beta')

错误消息:

使用horzcat时出错
被连接的矩阵的维度不一致
@(x1,x2)max([x1,x2,x1+x2])错误

我不能100%确定你想要实现什么,但错误在于beta作为bsxfun的第三个参数的换位;它是这样工作的:

beta=randn(50,1); 
bsxfun(@(x1,x2) max([x1 x2 x1+x2]), beta, beta)

bsxfun的第二个和第三个自变量需要具有相同的大小,才能对其应用逐元素二进制运算

编辑:从手册(http://www.mathworks.de/de/help/matlab/ref/bsxfun.html):

fun也可以是任何二进制元素函数的句柄,而不是上面列出的。形式为C=fun(A,B)的二进制元素函数接受任意但大小相等的数组A和B并返回输出大小相同。输出数组C中的每个元素都是仅对A和B的相应元素进行操作。

EDIT2:这是你想要的吗?

A = rand(1,50);
[x, y] = ndgrid(1:length(A), 1:length(A));
idc = [x(:) y(:)];
allMin = min([A(idc(:,1)) A(idc(:,2)) A(idc(:,1))+A(idc(:,2))]);

首先,使用第二和第三代码行,我生成所有可能的索引组合(所有对i/j),例如:如果A有3个条目,则idc看起来像:

1 1
1 2 
1 3
2 1
2 2
2 3
3 1 
3 2
3 3

然后我为每行条目(ij)建立一个包含值A(i)A(j)A(i)+A(j)的向量,并得到它的min

以下是我得到的(在bsxfun中使用两个max

beta = randn(50,1); 
res = bsxfun(@(x,y) max( x, max(y, x+y) ), beta, beta');

使用repmat 进行验证

tmp = max( cat(3, repmat(beta,[1 50]), repmat(beta',[50 1]), ...
                  repmat(beta,[1 50])+ repmat(beta',[50 1]) ), [], 3);
isequal( tmp, res )

相关内容

  • 没有找到相关文章

最新更新