У меня есть массив A N x 1, и я хочу получить результирующую матрицу с элементами, являющимися оценкой функции f (например, max) для пар A (i) и A (j) (i, j = 1,..., Н). Результирующая матрица будет иметь вид [f(A(i), A(j))]. У кого-нибудь есть предложения по достижению этого без использования цикла? Также лучше избегать bsxfun, так как bsxfun не реализован в некоторых программах. ТКС
попарная оценка без использования цикла
comment
Поместите код с петлями в свой вопрос. Прямо сейчас я действительно понятия не имею, что вы надеетесь получить на выходе.
- person KitsuneYMG   schedule 10.12.2013
comment
результат = нули (N, N); для i, j = 1: N, результат (i, j) = f (A (i), A (j))
- person yliueagle   schedule 10.12.2013
Ответы (2)
Используйте meshgrid
и arrayfun
:
[ii jj ] = ndgrid(1:N, 1:N); %// generate all combinations of i and j
result = arrayfun(@(n) f(A(ii(n)), A(jj(n))), 1:N^2);
result = reshape(result, length(A)*[1 1]); %// reshape into a matrix
Пример:
N = 3;
A = [4 5 2];
f = @(x,y) max(x,y);
>>[ii jj ] = ndgrid(1:N, 1:N);
result = arrayfun(@(n) f(A(ii(n)), A(jj(n))), 1:N^2);
result = reshape(result, length(A)*[1 1])
result =
4 5 4
5 5 5
4 5 2
person
Luis Mendo
schedule
10.12.2013
Если вам не нужны циклы и нет bsxfun
, вам остается repmat
ra = repmat( A, [1 size(N,1)] );
res = f( ra, ra' ); % assuming f can be vectorized over matrices
person
Shai
schedule
10.12.2013