I have the following computation I'd like to vectorize in matlab.
I have a N x 3 array, call it a.
I have a 4 x 1 cell array of function handles, call them b.
I would like to create an Nx4 matrix c, such that c(i,j) = b{j}(a(i,:).
b is actually an array, but I don't know how to write down my representation for c in a format that matlab would understand that uses a matrix.
If your function handles work on arrays (i.e. b{j}(a) returns a Nx1 array in your example), you can use CELLFUN and CELL2MAT to generate your output array:
c = cell2mat( cellfun( @(bFun)bFun(a),b,'UniformOutput',false) );
If your function handles only work on individual rows (i.e. b{j} needs to be applied to every row of a separately, you can throw ARRAYFUN into the mix (readability suffers a bit though; basically, you're applying each element of b via cellfun to each row of a via arrayfun):
c = cell2mat(...
cellfun( @(bFun)arrayfun(...
@(row)bFun(a(row,:)),1:size(a,1)),...
b,'UniformOutput',false) ...
);
pdist2 almost solves the problem above. Probably someone more clever than me can figure out how to shoe horn the two together.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With