我有一个N x 1阵列A,并希望得到结果矩阵,其中元素是对A(i)和&对上的函数f(例如max)的评估。 A(j)(i,j = 1,...,N)。结果矩阵看起来像[f(A(i),A(j))]。任何人都有建议不使用循环来实现这一目标?也更好地避免使用bsxfun,因为在某些程序中没有实现bsxfun。 TKS
答案 0 :(得分:1)
[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
答案 1 :(得分:0)
如果您不想要循环而没有bsxfun
,则会留下repmat
ra = repmat( A, [1 size(N,1)] );
res = f( ra, ra' ); % assuming f can be vectorized over matrices