Применить bsxfun или arrayfun к каждой строке матрицы
Есть две матрицы, A
а также B
с размером m
до 4 и n
до 4 соответственно. Мой вопрос, как применить функцию f
, который принимает два вектора 1x4 в качестве входных данных для каждой строки A и B. Результатом будет матрица с размером m
Иксn
, Элемент [i, j] в result
является 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
делать эту работу?
2 ответа
Ты можешь использовать 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
любой другой функцией, которая принимает два векторных ввода и возвращает число.
Эта функциональность встроена в 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);
чтобы получить матрицу, которую вы ищете.