将bsxfun或arrayfun应用于矩阵的每一行

时间:2013-11-10 23:35:09

标签: arrays matlab matrix bsxfun

有两个矩阵AB,大小为m - 分别为-4和n - by-4。我的问题是如何在A和B的每一行上应用函数f,它将两个1x4向量作为输入。结果将是一个大小为m x n的矩阵。 result中的元素[i,j]为f(A(i, :), B(j, :))

例如:

A = rand(3, 4);
B = rand(5, 4);
for i = 1 : 3
    for j = 1 : 5
        result(i, j) = rectint(A(i, :), B(j, :));
    end
end

我可以使用bsxfunarrayfun来完成这项工作吗?

2 个答案:

答案 0 :(得分:7)

如果您首先使用arrayfun生成所有行组合,则可以使用meshgrid

[ii jj] = meshgrid(1:size(A,1),1:size(B,1));
result = arrayfun(@(n) rectint( A(ii(n),:), B(jj(n),:) ), 1:numel(ii) );
result = reshape(result, size(B,1), size(A,1)).';

您当然可以用接受两个向量输入的任何其他函数替换rectint并返回一个数字。

答案 1 :(得分:2)

此功能内置于rectint。对于语法rectint(A,B)

  

AB也可以是矩阵,其中每一行都是位置向量。       然后AREA是一个矩阵,给出所有矩形的交集       由A指定的B指定的所有矩形。也就是说,如果A       是M-by-4BN-by-4,那么AREAM-by-N矩阵......

所以,你可以result = rectint(A,B);来获得你想要的矩阵。