有两个矩阵A
和B
,大小为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
我可以使用bsxfun
或arrayfun
来完成这项工作吗?
答案 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)
:
A
和B
也可以是矩阵,其中每一行都是位置向量。 然后AREA
是一个矩阵,给出所有矩形的交集 由A
指定的B
指定的所有矩形。也就是说,如果A
是M-by-4
而B
是N-by-4
,那么AREA
是M-by-N
矩阵......
所以,你可以result = rectint(A,B);
来获得你想要的矩阵。