When was the 'stable' option introduced in unique()?

The option wasn't available in R2009b, but it is present in R2015b. My release notes go from to R2012b to present, and it's not mentioned in there. I know the 'legacy' option was introduced in R2012b, but there's no mention of 'stable'. I have to conclude it was sometime in after R2009b and before R2012b.
Any recollections?

7 Comments

Mathworks' penchant for removing access to older versions documentation is infuriating, indeed...
When I saw the question, I thought it was R2012a, but I'm away from my pc where I have Too Many Versions installed.
There was a CAB meeting where I mentioned being a weirdo supporting 6.5 in my code. Someone responded within a minute with a graph created in 6.5. That person might know. Was it @Steven Lord perhaps? I can't find it in my history.
I don't remember off the top of my head, but I can check Monday morning.
I knew @Rik would probably have the goods :)
Now I have to decide if I actually want to bother implementing the functionality in older versions.
Apparently that was a good guess (both mine and yours) XD
You can easily circumvent it by sorting the list yourself (storing the indices), using unique (with the index output) and using the index(index)-trick to grab the elements from the original array.
If I recall correctly I had cause to do something like this and that was my approach. This may require some additional thought/testing to implement on arrays, but the vector case isn't that tricky to implement.
disp('edit: I''m not as smart as I thought'),disp('(or at least not the first with this idea)')
edit: I'm not as smart as I thought (or at least not the first with this idea)
I started writing something nice from scratch, and then I realized Sean had already written the code you need more than 13 years ago.
Yeah, I saw that, but I also need to re-sort the IC index list to match. I just haven't had enough contiguous moments of attention to actually think about it.
I swear it's like I forgot that ismember() exists.
% some inputs
V0 = rand(15,3);
V0 = V0(randi([1 10],10,1),:); % points
F0 = [1 2 3; 4 5 6; 7 8 9]; % row subscripts in V0
% this is what i need to replicate
[V1,~,ic0] = unique(V0,'rows','stable');
F1 = ic0(F0);
% this is it replicated without 'stable'
[~,ia,ic] = unique(V0,'rows');
[ias sortmap] = sort(ia);
[~,ics] = ismember(ic,sortmap);
V2 = V0(ias,:);
F2 = ics(F0);
% they match
isequal(V1,V2)
ans = logical
1
isequal(F1,F2)
ans = logical
1

Sign in to comment.

 Accepted Answer

More Answers (0)

Categories

Products

Asked:

DGM
on 10 Aug 2025

Edited:

on 11 Aug 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!