MATLAB Answers

How to label sorted variables

19 views (last 30 days)
Arif Widianto
Arif Widianto on 5 Jul 2020
Edited: Matt J on 6 Jul 2020
Hi,
Let say I have a matrix obtained from sort function,
x = [1,1,3;
2,2,1;
3,3,2]
with 1, 2, and 3 represent sorted values of certain variables in vertical manner alongside each column. I want to have another variable that stores the label of corresponding order.
% (e.g. It will be like this)
y = [A,A,B]
How can I do this if I have 7 variables that I want to sort in a 7-by-m matrix?
Thank you.

  1 Comment

dpb
dpb on 5 Jul 2020
Save the optional second index array variable and use it to reference the label array.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 5 Jul 2020
Maybe what you want:
>> labels=string({"A","B","C"});
>> x = [1,1,3;
2,2,1;
3,3,2];
>> labels(x)
ans =
3×3 string array
"A" "A" "C"
"B" "B" "A"
"C" "C" "B"

  6 Comments

Show 3 older comments
Stephen Cobeldick
Stephen Cobeldick on 6 Jul 2020
Rather than creating a cell array of scalar string arrays and then converting that to a non-scalar string array:
string({"A","B","C"})
simply create the non-scalar string array right from the start:
["A","B","C"]
dpb
dpb on 6 Jul 2020
You'll have to save the perms(1:7) array and find the location of each column in it as the index/label, then.
A string match will probably be faster than all(ismember()) or the like.
Matt J
Matt J on 6 Jul 2020
One thing you could do is create a label look-up table LUT, maintained a s a cell array
LUT=cell(1,2.^7);
vals=perms(1:7)*2.^(0:6).';
LUT(vals)=labels;
and now for a 7x3000 data set
[~,x]=sort(rand(7,3000)); %fake data
you would simply do
y=LUT(2.^(0:6) * x); %perform the label look-up

Sign in to comment.

More Answers (0)

Tags