MATLAB: Non-singleton dimensions of the two input arrays must match each other.

error in loop

a = {rand(6000,7); rand(3600,7); rand(600,7)};
mx = {randi(50,600,1), randi(50,600,1); randi(50,360,1), randi(50,360,1); randi(50,60,1), randi(50,60,1)};
mn = {randi(50,600,1), randi(50,600,1); randi(50,360,1), randi(50,360,1); randi(50,60,1), randi(50,60,1)};
q = mx;
for x = 1:size(q,1)
for y = size(mn,2)
b = reshape(a{x}(:,7),10,[]).';
b = bsxfun(@minus,b,mn{x,y});
b = bsxfun(@rdivide,b,mx{x,y}-mn{x,y});
q{x,y} = reshape(b.',[],1);
end
end
I want to change the following line b = reshape(a{x}(:,7),10,[]).' into b = transpose(reshape(a{x}(:,7),60,[]).') but I get an error even though both reshaping commands give me a 60 x 10 double.
Error using bsxfun Non-singleton dimensions of the two input arrays must match each other.
Where is my mistake?

Best Answer

You wish to perform an array transpose on the following line:
b = reshape(a{x}(:,7),10,[]).';
However this line already has a transpose operation .' at the end. So transposing it twice is simply equivalent to not transposing it:
b = reshape(a{x}(:,7),10,[]);
In any case, the error is telling you that the two input matrices provided to the function bsxfun must match in size on all dimensions that are not singleton. Have a look at the dimensions of the arrays used as inputs to bsxfun. Do these fit the requirements of the documentation?
You should learn to use some debugging tools , then you could figure out for yourself where this error is occurring.