在MATLAB中将函数应用于两个矩阵中的每对列

时间:2012-03-21 22:02:51

标签: matlab

在MATLAB中,我想将函数应用于矩阵AB中的每对列向量。我知道必须有一种有效的(非for)方法,但我无法弄明白。该函数将输出标量。

2 个答案:

答案 0 :(得分:7)

尝试

na = size(A,1);
nb = size(B,1);
newvector = bsxfun(@(j,k)(func(A(j,:),B(k,:))),1:na,(1:nb)');

bsxfun在1:na和(1:nb)'上执行单例扩展。在这种情况下,最终结果是func将应用于从A和B绘制的每对列向量。

请注意,bsxfun可能很棘手:它可能要求应用的函数本身支持单例扩展。在这种情况下,它可以完成你想要的工作。

答案 1 :(得分:1)

你的意思是成对吗?所以在for循环中,函数将作为scalar_val = func(A(i),B(i))

如果AB具有相同的尺寸,您可以应用ARRAYFUN功能:

newvector = arrayfun(@(x) func(A(x),B(x)), 1:numel(A));

<强>更新

根据您的评论,您需要将A和B的所有组合作为scalar_val = func(A(i), B(j))运行。这有点复杂,对于大型矢量可以快速填充内存。

如果您的功能是标准功能之一,可以尝试使用BSXFUN

out = bsxfun(@plus, A, B');

另一种方法是使用MESHGRID和ARRAYFUN:

[Am, Bm] = meshgrid(A,B);
out = arrayfun(@(x) func(Am(x),Bm(x)), 1:numel(Am));
out = reshape(out, numel(A), numel(B));

我相信它应该有效,但我现在没有时间对它进行测试。