# reverse indexing of a matrix in matlab

149 views (last 30 days)
lilly lord on 7 Jun 2020
Commented: lilly lord on 7 Jun 2020
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
KSSV on 7 Jun 2020
[m_1(j,:),Index]=Ma(j,:);
This will not work.....from where you expect to get Index? What actualy you are looking for.

Sriram Tadavarty on 7 Jun 2020
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
lilly lord on 7 Jun 2020
Oh sorry, i have changed the bottom loop only. Now I get the correct output. Thank you so much