# Write Similar Expressions in Arrayfun

1 view (last 30 days)
MarshallSc on 3 Jan 2022
Commented: MarshallSc on 3 Jan 2022
Is there a concise way to write these 4 expressions so that I don't have to write all of them seperately mayble in a for loop?
n= numel(X);
r_x=1./X; % (X, Y , Z , R are square matrices)
t_x = @(x) sum((x-r_x)./(x+r_x),'all')/n;
x = arrayfun(t_x,r_x);
r_y=1./Y;
t_y = @(x) sum((x-r__y)./(x+r_y),'all')/n;
y = arrayfun(t_y,r_y);
r_z=1./Z;
t_z = @(x) sum((x-r_z)./(x+r_z),'all')/n;
z = arrayfun(t_z,r_z);
r_r=1./R;
t_r = @(x) sum((x-r_r)./(x+r_r),'all')/n;
r = arrayfun(t_r,r_r);
##### 2 CommentsShowHide 1 older comment
MarshallSc on 3 Jan 2022
100 * 100. I have 20 matrices that I need to perform this operation on.

Matt J on 3 Jan 2022
Edited: Matt J on 3 Jan 2022
n=numel(X);
r=1./[X(:),Y(:),Z(:),R(:)].';
rt=reshape(r,4,1,[]);
out= squeeze( sum( (rt-r)./(rt+r) ,2)/n ).';
out=num2cell( reshape( out , [size(X),4] ) ,[1,2]);
[x,y,z,r]=deal(out{:});
MarshallSc on 3 Jan 2022
Thanks Matt!