|
Liebe Mathematica Freunde, bei mir taucht das folgende Problem auf, für das ich bisher noch keine befriedigende Lösung gefunden habe: Ich muß verschiedene Variable, die alle dieselbe Länge haben, in eine Sortierreihefolge bringen, die von einer weiteren Variablen bestimmt wird. Das kann man z.B. mit einem Indexvektor machen, der die Sortierreihenfolge enthält. Wie jedoch läßt sich der Indexvektor effizient ermitteln? Gibt es dafür einen Mathematica-Befehl? Meine jetzige Lösung sieht so aus: Rechnung: In[23]:= n=10; b=Table[Random[],{n}] indxVec=Sort[Range[n],b[[#1]]>b[[#2]]&] Out[23]= {0.545115,0.684802,0.157131,0.531776,0.199671,0.197229,0.57873,0.905978, 0.198748,0.717526} Out[24]= {8,10,2,7,1,4,5,9,6,3} Test: In[25]:= Inner[Equal,Sort[b,Greater],b[[indxVec]],And] Out[25]= True Sie liefert zwar das richtige Ergebnis, funktioniert aber nur für Vektoren und dauert recht lange im Vergleich zur normalen Sortierfunktion: In[46]:= n=100000; b=Table[Random[],{n}]; Timing[indxVec=Sort[Range[n],b[[#1]]>b[[#2]]&];] Out[46]= {62.859 Second,Null} In[47]:= Timing[Sort[b,Greater];] Out[47]= {17.062 Second,Null} In[48]:= Timing[Sort[b];] Out[48]= {2.328 Second,Null} Für Tips wäre ich sehr dankbar. Herzliche Grüße Wolfgang |