Variablen Namen generieren < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Ich würde gerne Namen für Variablen dynamisch definieren.
Konkret habe ich eine Liste mit Bezeichnungen:
{"ZH","BE","GR",...}
Daraus möchte ich nun folgende Verteilungen definieren:
myAgeZHDistribution = EmpiricalDistribution[... -> ...];
myAgeBEDistribution = EmpiricalDistribution[... -> ...];
myAgeGRDistribution = EmpiricalDistribution[... -> ...];
Ist es möglich, dies zum Beispiel in einer For-Schleife zu tun, in welcher die Namen für die Verteilungen mit Hilfe der obigen Liste generiert werden?
Grüsse aus Zürich.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 08:58 Mi 13.06.2012 | Autor: | danm357 |
Hallo,
Du könntest folgendes machen:
Definiere eine Liste mit Deinen Länderkürzeln:
countriesList = {"ZH", "BE", "GR", "USA"};
Deine Namensliste bekommst Du dann einfach mit:
namesList =
Table["myAge" <> countriesList[ [ i ] ]<> "Distribution", {i, 1, Length[countriesList]}]
Weiterarbeiten kannst Du dann mit etwas ähnlichen wie:
Table[namesList[ [i] ] =
EmpiricalDistribution[listenName1[ [i] ] -> ...];, {i, 1,
Length[countriesList]}]
Wobei Du hoffentlich erkennst, dass Du diesen Pseudo-Code etwas auf Deine Bedürfnisse anpassen musst.
P.S. Die eckingen Doppelklammern gehören direkt hintereinanden geschrieben, aber das bekomme ich hier einfach nicht hin...
|
|
|
|
|
Hallo danm357
Besten Dank für die Antwort. Leider werde ich daraus nicht ganz schlau ;) Entweder verstehe ich Deinen Code nicht, oder er macht nicht das, was ich mir wünsche.
Das generieren der namesList in Deinem ersten Table-Befehl ist natürlich kein Problem. Ich möchte dann aber verschiedene Verteilungen generieren, die diese Namen erhalten. Dein zweiter Table-Befehl scheint mir, die Verteilungen einfach in der namesList abzulegen.
Ich möchte gerne, dass meine Verteilungen schlussendlich die Namen aus der namesList haben, damit ich die wie folgt verwenden kann:
z.B.:
Mean[myAgeZHDistribution]
StandardDeviation[myAgeCHDistribution]
Probability[x >= 65, x [mm] \[Distributed] [/mm] myAgeGRDistribution] usw.
Oder auch davon losgelöst: wie kann ich einer Variablen einen Wert zuweisen, wenn der Name der Variable aus einem String geholt werden soll .
Grüsse. Epsilon
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:20 Fr 15.06.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:13 So 24.06.2012 | Autor: | Peter_Pein |
Hallo,
da ich tippfaul bin, nehme ich zur Veranschaulichung Variablen mit zwei Zeichen:
1: | zuweisung[name_String, index_Integer, wert_] :=
| 2: | Set[Evaluate[ToExpression[name <> ToString[index]]], wert] |
Dann werden die Variablen x1, x2,x3,y1, ..., z3 durch
1: | Module[{w = 123},
| 2: | Outer[zuweisung[#1, #2, w++] &, {"x", "y", "z"}, {1, 2, 3}]
| 3: | ]; |
mit verschiedenen Werten belegt, die beispielsweise per
1: | {#, ToExpression@#}& /@
| 2: | Flatten[Outer[StringJoin, ##]& @@
| 3: | Map[ToString, {{x, y, z}, {1, 2, 3}}, {2}]
| 4: | ] |
ermittelt werden können.
Gruß,
Peter
|
|
|
|
|
Herzlichen Dank Peter für die Ausführungen.
Habe Deine Antwort erst jetzt gesehen, da ich schon von danm357 eine hilfreiche Antwort bekommen habe und deshalb eine Weile nicht mehr reingeschaut habe, sorry.
Deine Antwort erfasst genau mein Anliegen und hat auch noch neue Aspekte drin im Vergleich mit der Antwort von danm357. Auf jeden Fall ist "Evaluate" in Kombination mit "Symbol" bzw "ToExpression" das Zauberwort, das ich gesucht habe.
Nochmals danke & Grüsse aus Zürich.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:32 Mi 13.06.2012 | Autor: | danm357 |
Sali Epsilon,
Danke für das Feedback. Schön zu hören, dass das Generieren der namesList klar zu sein scheint.
Den zweiten Teil Deiner Frage kann ich momentan nicht viel besser beantworten, da ich Deine Daten nicht kenne.
Falls Deine Daten in einem array sind, könntest Du vielleicht folgendes machen:
Table[namesList[ [i] ] = data[ [i] ], {i, 1, Length[countriesList]}]
Damit hat nun jedes Element aus Deiner namesList seinen eigenen Datensatz erhalten.
Dies setzt natürlich voraus, dass Du Deine Daten so geordnet hast, dass data[ [1] ] zu „ZH“ und data[ [2] ] zu „Be“ gehört etc. (und die namesList diese Reihenfolge übernimmt).
Nun könntest Du problemlos Mean[myAgeZHDistribution] etc. berechnen.
Wenn das Deine Frage nicht beantwortet, könnte ich Dir vielleicht weiterhelfen, wenn Du mir mitteilst, woher Deine Daten kommen, welche Form sie haben etc.
Cu!
|
|
|
|
|
Die originalen Daten importiere ich direkt aus Excel-Dateien, wobei das nichts mit meinem Problem zu tun hat.
Deshalb hier ein kleines Beispiel:
Die Verteilung definiere ich mal wie folgt:
myDistribution = EmpiricalDistribution[{0.2, 0.8} -> {0, 1}];
Nun möchte ich die gleiche Verteilung unter dem neuen Namen myNewDistribution ablegen wobei dieser Name aus einem String geholt werden soll, so in der Art:
distributionName = "myNewDistribution";
... = EmpiricalDistribution[{0.2, 0.8} -> {0, 1}];
So weit ich sehe, löst Dein Vorschlag das Problem nicht. Oder sonst verstehe ich da was falsch?
Grüsse. Epsilon
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:58 Mi 13.06.2012 | Autor: | danm357 |
Hoi Epsilon,
doch, ich finde schon, dass die Art der Daten etwas mit der Problemlösung zu tun hat.
Hast Du für ZH BE etc. ein jeweiliges Datenset (dataSet1, etc.) dann kannst Du folgendes machen:
data = {{"ZH", "BE", "GR", "USA"}, {{dataSet1}, {dataSet2}, {dataSet3}, {dataSet4}}};
MapThread[(Clear[#1]; Evaluate[Symbol[#1]] = #2) &, data];
Gibst Du nun ZH ein, erhältst Du als Output dataSet1 (also all die Zahlen etc., die sich darin befinden).
Auf dieses dataSet1 kannst Du nun Mean etc. anwenden.
Ich hoffe, das hilft Dir etwas weiter!
|
|
|
|
|
Hey danm357
Herzlichen Dank, das hat geholfen *freu*. Die Kombination von Evaluate[Symbol[String]]=... ist exakt das, was ich gesucht habe. Funktioniert jetzt absolut perfekt:
distributionName = "myDistribution";
Evaluate[Symbol[distributionName]] = EmpiricalDistribution[{0.2, 0.8} -> {0, 1}];
Mean[myDistribution]
Werde noch ein bisschen nachlesen, was Evaluate und Symbol genau bewirken, damit ich die Funktionsweise genau verstehe.
Nochmals vielen vielen Dank.
Grüsse. Epsilon
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:15 Mi 13.06.2012 | Autor: | danm357 |
Vielen Dank für das Feedback!
Freut mich sehr zu hören, dass Du nun weiterkommst.
|
|
|
|