Relative Ranking of position in an array

2 Ansichten (letzte 30 Tage)
Mick Stukes
Mick Stukes am 6 Mai 2021
Beantwortet: Bruno Luong am 7 Mai 2021
Hi!
I have a large array with 10 rows of numerical data. I am trying to find an 'ordering' by size of all the elements. I turned the raw data into an indexed array through maxk:
[M10,I10]= maxk(dgoutput,10,1)
And my I10 array has the row number for the elements in order from greatest to least (1-10). It looks like this:
1 2 1 1 1 2 1 1 2
2 1 3 6 3 1 3 3 1
4 3 4 3 2 3 4 2 3
3 4 2 7 4 6 2 5 4
5 5 5 5 6 7 5 4 5
8 8 6 4 5 4 6 6 7
9 7 7 2 7 5 7 9 6
7 6 9 9 8 9 10 8 8
6 9 8 8 9 8 8 7 9
10 10 10 10 10 10 9 10 10
And I'm trying to find a way to count the occurrences when one number occurs in a higher row than another. As an example a
Count (1>2) would return 6 since there are 6 columns where 1 is above 2.
and Count(2>1) would return 3, etc.
Any help would be appreciated!

Akzeptierte Antwort

David Hill
David Hill am 6 Mai 2021
If a is your matrix above.
sum(find(a==1)-find(a==2)<0);
  2 Kommentare
Mick Stukes
Mick Stukes am 7 Mai 2021
Thanks for this! My situation is a touch more complicated than I had originally explained, and I'm struggling to adapt this method to my needs.
I am now searching through my array for columns where two specific criteria to be met:
1: the number 3 is in the first row
AND
2: the number 1 occurs in a higher row than the number 2
Currenlty I can only find it for exact placings with the code:
AI = sum(I10(1, :) == 3 & I10(2, :) == 1 & I10(3, :) == 2);
Which gives me only the total where the rows have 3, 1 and then 2.
Can you help?
Mick Stukes
Mick Stukes am 7 Mai 2021
I have tried using the find command in conjunction with the & criterion:
AI = sum(I10(1, :) == 3 & find(I10==1)-find(I10==2)<0);
but I get an error:
Requested 100000x100000 (9.3GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a
long time and cause MATLAB to become unresponsive.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Bruno Luong
Bruno Luong am 7 Mai 2021
I10=[1 2 1 1 1 2 1 1 2
2 1 3 6 3 1 3 3 1
4 3 4 3 2 3 4 2 3
3 4 2 7 4 6 2 5 4
5 5 5 5 6 7 5 4 5
8 8 6 4 5 4 6 6 7
9 7 7 2 7 5 7 9 6
7 6 9 9 8 9 10 8 8
6 9 8 8 9 8 8 7 9
10 10 10 10 10 10 9 10 10];
[r1,~]=find(I10==1);
[r2,~]=find(I10==2);
count1gt2 = sum(r1<r2)
count1gt2 = 6
count2lt1 = sum(r2<r1)
count2lt1 = 3

Kategorien

Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by