matrix sorting and distibution

2 次查看(过去 30 天)
I have this matrix:
2 2 82 10 16 15 66 76 71 83 44 49
4 2 91 28 98 43 4 75 4 70 39 45
4 1 13 55 96 92 85 40 28 32 77 65
1 2 92 96 49 80 94 66 5 96 80 71
1 2 64 97 81 96 68 18 10 4 19 76
the code should look to first column,if its not repeated,gives the output:
8 1 6 7 5 10 9 3 4 2 which is the indices after sorting in descending way.
if its repeated,look to the second column if 1 ,the code should sort the elements of second line and distribute them as 1:7 to original and the rest to the repetition
if the of second column is 2 ,the code should divide 1:5 to first and 5:10 to the second.
the result should look like:
8 1 6 7 5 10 9 3 4 2
3 1 6 8 10 0 0 0 0 0
4 9 2 5 7 0 0 0 0 0
2 8 5 1 4 0 0 0 0 0

采纳的回答

Geoff Hayes
Geoff Hayes 2014-5-4
yousef - the easiest part of the above problem is to get a matrix of sorted indices that correspond to the data in each row sorted in descending order. Consider using the sort command (type help sort in the command window for details). With it, you can sort as follows:
Z = [2 2 82 10]; % your 5x12 input matrix
% ignore (~) sorted data and consider the indices (Idcs) only, sorting on all rows of Z but only
% on columns 3 through the end; we sort on the second dimension (2) which is the columns in
% descending order
>>[~,Idcs] = sort(Z(:,3:end),2,'descend');
>> Idcs
Idcs =
8 1 6 7 5 10 9 3 4 2
3 1 6 8 10 4 9 2 5 7
3 4 5 9 10 2 6 8 7 1
2 8 5 1 4 9 10 6 3 7
2 4 3 10 5 1 9 6 7 8
Now you can iterate over each element in the first row of Z, checking to see how many times that element is repeated in that first column (I think that is your requirement). You can cound the number of times an element is repeated by using a combination of the length and find commands (left to you). If not repeated, then do nothing since the row of Idcs is already sorted in descending order by indices. If it is repeated, then consider the second column and check for its repetition using length and find. If not repeated, then apply your first rule (which is a little fuzzy - why consider 1:7 and what is repetition? If it is repeated, then apply your second rule which is a little fuzzy too - are you leaving the first five indices in the current row, and moving the remaining five indices to the subsequent row? (Or that row which has the repeated second column element? Is that why your final answer has only four rows when the input has five?
  5 个评论
yousef Yousef
yousef Yousef 2014-5-5
Hi,Thanks Geof.I called the result Geof instead of Idcs. I did it with while lop and it works fine.
Thanks a lot

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by