有人知道错误在哪里吗?非常感谢!
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
然后我为每行条目(i
,j
)建立一个包含值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 )