MATLAB: Replace values in a matrix

replace values matrix

Hi,
I have a 250×250 matrix, each cell having either 1,2,3,4,5 or NaN, derived from kmeans index. I'm looking to reorder my kmeans values and have found a new order for these values based on populatation e.g. 3 4 5 2 1, 3 being most populated, 1 being least. I'm looking for a way to tell the system to make 3 the new 1, 4 the new 2 etc.. i.e. replace all 3s with 1, all 4s with 2, all 5s with 3, all 2s with 4, all 1s with 5. However, when I use a loop, I end up losing data as it thinks the converted numbers were my original ones and replaces them to a new value.

Best Answer

Because you are only using integers, you can even use indexing to do the replacement:
A=[NaN NaN NaN 3 3 3 2 NaN NaN NaN
NaN 4 4 3 3 3 3 3 NaN NaN
NaN NaN 4 3 3 3 5 2 NaN NaN
NaN 3 3 3 3 1 3 3 3 NaN
4 1 4 2 5 5 5 3 NaN NaN
4 2 4 3 5 5 5 3 3 NaN
NaN 2 4 3 3 3 3 3 NaN NaN
NaN 3 3 3 2 1 5 4 NaN NaN
NaN NaN NaN 3 1 4 1 3 NaN NaN
NaN NaN NaN 3 3 3 3 3 NaN NaN];
dict=[5 4 1 2 3];
L=~isnan(A);
A(L)=dict(A(L))
A = 10×10
NaN NaN NaN 1 1 1 4 NaN NaN NaN NaN 2 2 1 1 1 1 1 NaN NaN NaN NaN 2 1 1 1 3 4 NaN NaN NaN 1 1 1 1 5 1 1 1 NaN 2 5 2 4 3 3 3 1 NaN NaN 2 4 2 1 3 3 3 1 1 NaN NaN 4 2 1 1 1 1 1 NaN NaN NaN 1 1 1 4 5 3 2 NaN NaN NaN NaN NaN 1 5 2 5 1 NaN NaN NaN NaN NaN 1 1 1 1 1 NaN NaN