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
|