bsxfun:连接的矩阵的维数不一致

时间:2013-12-09 15:41:51

标签: matlab bsxfun

任何人都知道错误在哪里?非常感谢!

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

错误消息:

  

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

出错

2 个答案:

答案 0 :(得分:2)

我不是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个条目,{{ 1}}看起来像:

idc

然后我为每行条目(1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 A(i))构建一个包含值A(j)A(i)+A(j)i的向量并获得它的j

答案 1 :(得分:1)

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

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 )