MATLAB: Reverse indexing of a matrix in matlab

inverse indexing

Hi I have the code and i want the inverse mapping that is to get back P
P=[188 5 95 60;3 59 0 111;255 123 51 84 ];
Ma=[25 222 80 6;100 1 190 97;73 33 254 184 ];
M_1=zeros(size(Ma ));
P_1=zeros(size(P ));
for i=1:3
[M_1(i,:),Index]=sort(Ma(i ,:));
P_1(i,:) = P(i,Index );
end
%%%%%%Inverse
m_1=zeros(size(M_1));
p_1=zeros(size(P_1));
for j=1:3
[m_1(j,:),Index]=Ma(j,:);% here I dont need any sort commant bur error occurs here
p_1(j,:)=P_1(j,Index);
end
p_1

Best Answer

Hi Lilly,
You get error at that line, because, you just removed the sort operation, which can provide two outputs.
The code can not have two outputs, when it is just a variable and no operation is performed on it.
Your code above doesn't perform what you wanted to do. You can perform or get the inverse, with the help of Index variable.
Here is the code that can be done, if you have Index variable
P=[188 5 95 60;3 59 0 111;255 123 51 84 ];
Ma=[25 222 80 6;100 1 190 97;73 33 254 184 ];
M_1=zeros(size(Ma ));
P_1=zeros(size(P ));
Index = zeros(size(Ma));
for i=1:3
[M_1(i,:),Index(i,:)]=sort(Ma(i ,:));
P_1(i,:) = P(i,Index(i,:) );
end
%%%%%%Inverse
% Perform this with the help of Index
p_1 = zeros(size(P_1));
for j = 1:3
p_1(j,Index(j,:)) = P_1(j,:);
end
p_1
isequal(p_1,P) % To check if p_1 is equal to P
Hope this helps.
Regards,
Sriram