MATLAB: Transforming a script for a matrix to a cell array

transformation matrix cell array

a = randi(50,600,9);
mx = randi(50,60,1);
mn = randi(50,60,1);
b = reshape(a(:,7),10,[]).';
q = bsxfun(@minus,b,mx);
%q = bsxfun(@rdivide,q,mx-mn);
%q = reshape(q.',[],1);
How can I apply this code which has been designed for a matrix table to a cell array?
Imagine the following
a = { rand(6000,7); rand(3600,7); rand(600,7); };
mx = {randi(50,600,1); randi(360,60,1); randi(50,60,1)}
mn = {randi(50,600,1); randi(360,60,1); randi(50,60,1)}

Best Answer

It seems that you want to apply a function to multiple numeric arrays contained in several cell arrays. There are essentially two ways to achieve this:
  • Use a loop over the length of the arrays.
  • Use cellfun .
Note that a loop can be achieved in a script, whereas cellfun would (most likely) require a function to be defined. cellfun can be a tidy solution, as it allows local code to show intent by defining a complicated function elsewhere. In any case, the following code will apply that function to those cell arrays, using loops:
a = {rand(6000,7); rand(3600,7); rand(600,7)};
mx = {randi(50,600,1); randi(50,360,1); randi(50,60,1)};
mn = {randi(50,600,1); randi(50,360,1); randi(50,60,1)};
q = a;
for k = 1:numel(q)
b = reshape(a{k}(:,7),10,[]).';
b = bsxfun(@minus,b,mx{k});
b = bsxfun(@rdivide,b,mx{k}-mn{k});
q{k} = reshape(b.',[],1);
end
Note that this code includes several corrections to what you supplied above, as the dimensions of randi(360,60,1) will lead to an error. I also uncommented the last two lines of the algorithm, as these are required to match the function that you gave in an earlier question.