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
|