将 BSXFUN 或 ArrayFun 应用于矩阵的每一行



有两个矩阵,AB,大小分别为m×4和n×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来完成这项工作吗?

如果您

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

[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替换为接受两个向量输入并返回一个数字的任何其他函数。

此功能

内置于 rectint 中。对于语法rectint(A,B)

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

因此,您可以执行result = rectint(A,B);来获取所需的矩阵。

相关内容

  • 没有找到相关文章

最新更新