Применить 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); чтобы получить матрицу, которую вы ищете.

Другие вопросы по тегам