【问题标题】:apply bsxfun or arrayfun to every row of a matrix将 bsxfun 或 arrayfun 应用于矩阵的每一行
【发布时间】:2013-11-22 16:20:21
【问题描述】:

有两个矩阵,AB,大小分别为 m-by-4 和 n-by-4。我的问题是如何在 A 和 B 的每一行上应用一个函数 f,它以两个 1x4 向量作为输入。结果将是一个大小为 mxn 的矩阵。 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 来完成这项工作吗?

【问题讨论】:

  • 我猜你会按照你写的那样做 - bsxfun 是元素方面的,我认为你不能那样滥用它。
  • 你能重写你的rectint函数来接受和返回矩阵吗?
  • @David, 'rectint' 是 matlab 内置函数,用于计算矩形的重叠。
  • 根据 Luis Mendo 的回答,我认为使用 meshgrid 将是最简单的解决方案。
  • @David:无需重写rectint。它已经处理了矩阵。虽然,这听起来只是一个例子。

标签: arrays matlab matrix bsxfun


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 是的。 rectint 可以处理矩阵。仅以它为例。
    • @FihopZz:公平的问题。我只是不得不指出这一点——以为我快疯了。 :) 无论如何,Luis Mendo 的回答是针对具有矢量输入和标量输出的函数的现场演示,IMO。
    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多