shuffle indexes when sorting matrix
1 次查看(过去 30 天)
显示 更早的评论
Hi everyone,
I am in urgent need for a solution as I am really stuck!
I have a matrix "image" that needs to be sorted per column and I did that by:
[~, index_sorted] = sort(image,2,'descend');
which works fine and I have the indexes of the elements sorted.
However, image contains a lot of repeated values and when I order the indexes I always obtain the values in order.
So for example, if image is:
image = [0 0 0 -1; 0 0 -1 0; 1 1 0 0; 0 2 0 0]
index_sorted = [1 2 3 4; 1 2 4 3; 1 2 3 4; 2 1 3 4]
I am looking for a way to shuffle the order of those elements that have the same value in image, so that I do not always obtain the indexes in a crescendum but they are mixed, so for example in this case:
index_sorted = [2 1 3 4; 4 1 2 3; 2 1 3 4; 2 3 1 4]
or something like that.
Do you know a way to do it? Note that image is a large matrix and its elements can vary in R, as well as it can have as many repeated values as possible.
Thank you so so much for your help!!
0 个评论
采纳的回答
the cyclist
2020-9-25
编辑:the cyclist
2020-9-25
One way that springs to mind is to add a small, random "jitter" to the values in the image. The jitter magnitude should be small enough that it never exceeds the difference between your non-equal elements. Then, for the equal elements, they will end up being sorted in a random order. For example, in your example:
jitter = 0.01 * rand(size(image));
[~, index_sorted] = sort(image+jitter,2,'descend');
Rather than manually selecting the jitter magnitude (as I chose 0.01 here), you could also select it programmatically by finding the smallest non-zero difference between elements in the same row.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!