|
Lieber Wolfgang, > 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]]&] man kann ausnutzen, dass Sort bei Wertepaaren nach dem ersten Element des Wertepaars sortiert: sunny% math Mathematica 3.0 for Solaris Copyright 1988-97 Wolfram Research, Inc. -- Motif graphics initialized -- In[1]:= n = 10000; In[2]:= b = Table[Random[], {n}]; In[3]:= Timing[indexVector1 = Sort[Range[n], b[[#1]] > b[[#2]] &];] Out[3]= {70.74 Second, Null} In[4]:= Timing[indexVector2 = Reverse[Map[#[[2]] &, Sort[Transpose[{b, Range[n]}]]]];] Out[4]= {4.7 Second, Null} In[5]:= indexVector1 == indexVector2 Out[5]= True Viele Gruesse, Arnd -- Arnd Roth Abteilung Zellphysiologie Max-Planck-Institut fuer Medizinische Forschung Postfach 10 38 20, D-69028 Heidelberg |