2016-06-25 6 views
0

Betrachten Sie ein Beispiel, das unten gegeben wird. Es gibt 3 Kunden A, B, C. erste Zeile der Matrix ist die Nachfrage des jeweiligen Kunden und zweite Zeile ist der Tag, wenn sie brauchen. zum Beispiel: Nachfrage A = [10,40,50; 15,45,75]; Kunde A benötigt 10 Artikel am 15. Tag. 40 Artikel am 45. Tag und 50 Artikel am 75. Tag. Ähnlich für B, C.Matlab Programmierung, Matrix Sortierung und Ranking

demand A=[10,40,50;15,45,75]; 
demand B=[80,30,20;05,35,80]; 
demand C=[50,40,30;20,47,88]; 

Jetzt muss ich den Kunden auf Basis von Tagen rangieren. Also hier Antwort sollte wie sein Rang 1: 5. Tag Kunde B 80 Artikel Rang 2: 15. Tag Kunde A 10 Artikel Rang 3: 20. Tag Kunde C 50 Artikel. und so weiter.

Wie kann ich es im Matlabor tun? so dass wenn ich es auf basis des tages range dann sollte ich dann wissen wie viele einzelteile und welcher kunde dementsprechend sind.

Ausgang soll wie folgt sein:

   Rank Customer items day 
        1  B  80  05 
        2  A  10  15 
        3  C  50  20 
        4  B  30  35 
        5  A  40  45 
        6  C  40  47 
        7  A  40  75 
        8  B  20  80 
        9  C  30  88 
+0

Können Sie nach, was Sie der Ausgang eigentlich erwarten eher aussehen als zu versuchen, es in Worten zu beschreiben? – Suever

+0

Können Sie das in Ihre Frage bearbeiten, anstatt es in den Kommentar zu schreiben? – Suever

Antwort

0

schlage ich vor, die folgende Vorgehensweise:

Erste Stufe

eine neue Matrix erzeugt, die die Zusammensetzung von A, B und C , so dass: Das erste col repräsentiert den Tag. Die zweite Spalte stellt die angeforderte Menge dar. Die dritte Spalte ist der Kundenindex (A = 1, B = 2, C = 3).

res = [A',ones(size(A',1),1);B',ones(size(A',1),1)*2;C',ones(size(C',1),1)*3]; 
res(:,[2,1]) = res(:,[1,2]); 

Zweite Stufe

Art die Matrix nach der ersten Spalte, die den Tag

[~,sortedDaysIndices] = sort(res(:,1)); 
res = res(sortedDaysIndices,:); 

Dritte Stufe stellt: drucken Sie die Ergebnisse

for ii=1:size(res) 
    if res(ii,3)==1 
     costumerStr = 'A'; 
    elseif res(ii,3)==2 
     costumerStr = 'B'; 
    else 
     costumerStr = 'C'; 
    end 

    fprintf('%s\n',[num2str(ii) ' ' costumerStr ' ' num2str(res(ii,2)) ' ' num2str(res(ii,1))]) 
end 

Ergebnis

1 B 80 5 
2 A 10 15 
3 C 50 20 
4 B 30 35 
5 A 40 45 
6 C 40 47 
7 A 50 75 
8 B 20 80 
9 C 30 88