Apply function to every pair of columns in two matrices in MATLAB

后端 未结 2 1674
走了就别回头了
走了就别回头了 2021-01-06 20:30

In MATLAB, I\'d like to apply a function to every pair of column vectors in matrices A and B. I know there must be an efficient (non for

2条回答
  •  暖寄归人
    2021-01-06 20:44

    Do you mean pairwise? So in a for-loop the function will work as scalar_val = func(A(i),B(i))?

    If A and B have the same size you can apply ARRAYFUN function:

    newvector = arrayfun(@(x) func(A(x),B(x)), 1:numel(A));
    

    UPDATE:

    According your comment you need to run all combinations of A and B as scalar_val = func(A(i), B(j)). This is a little more complicated and for large vectors can fill the memory quickly.

    If your function is one of standard you can try using BSXFUN:

    out = bsxfun(@plus, A, B');
    

    Another way is to use MESHGRID and ARRAYFUN:

    [Am, Bm] = meshgrid(A,B);
    out = arrayfun(@(x) func(Am(x),Bm(x)), 1:numel(Am));
    out = reshape(out, numel(A), numel(B));
    

    I believe it should work, but I don't have time to test it now.

提交回复
热议问题