|
|
dynamischer Variablenname in der ABFRAGE |
|
Barny.G |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 17.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 14:29
Titel: dynamischer Variablenname in der ABFRAGE
|
 |
Hallo liebe Gemeinde,
ein kleines Problem stellt mich vor eine unschöne Programmieraufgabe:
Es existiert ein sehr großes Dataset (Struktur) in welchem immer wieder Vektoren "auftauchen", die ich benötige. Die Variablennamen der Vektoren sind eindeutig und unterscheiden sich nur in einer Zahl (Nummer). Siehe folgende Beispiel:
Zitat: |
data.data.t_2311_000500100.X_02.t
data.data.t_2311_000500101.X_02.t
data.data.t_2311_000500102.X_02.t
... usw |
Nun habe ich als Beipsiel mal einen code eingestellt, der zeigt, wie ich mir das Abfragen der Variablen vorstelle. Natürlich geht es so nicht...
Kann mir jemand helfen und mir aufschreiben, wie ich sehr einfach diese (wirklich vielen) Vektoren unkompliziert abfragen kann?
Wie schon gesagt, die Variablennamen sind vorhanden...
Viele Grüße
Thomas
|
|
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 14:53
Titel:
|
 |
|
|
Barny.G |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 17.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 19:01
Titel:
|
 |
Hallo Seban,
leider ändert das noch nichts an meinem Problem. Ich möchte gern jeden einzelnen Vektor in die entstehende Matrix X einlesen und dafür eben eine Schleife nutzen, die sozusagen automatisch die ganzen Variablen durchgeht.
Kannst Du mir auch dazu eine Hilfestellung geben?
Hier mal ein Beispiel, wie ich mir das vorstelle - gegeben sind die Vektoren
Nun möchte ich diese gegebenen Vektoren in eine Matrix einlesen mit einer Schleife, in der einfach mit dem steigenden Inkrement der Variablenname um Eins erhöht wird:
Wie schon gesagt ist das nur ein schematischer Code, so wie ich das möchte, leider fehlt mir die Idee den Variablennamen direkt aufzurufen...
Viele Grüße
Thomas
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 19:15
Titel:
|
 |
Hallo Thomas,
so:
Grüße
Sirius
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 19:31
Titel:
|
 |
Ach so, du möchtest
X =
1 2 3 4
2 9 8 3
2 5 7 0
0 7 0 8
erhalten. Ich dachte eine Liste der Namen der Vektoren. Sorry, falsch verstanden
@Sirius: Du hast mir ja gestern vollkommen zurecht in einem anderen Thread von eval abgeraten. Hier das zweite vereinfachte Beispiel kann man ja so lösen:
Wäre das in diesem Fall legitim? Man hat ja einen String vi, den man mit eval direkt auswerten kann. Oder würde man das auch besser anders lösen? (Auf das erste Bsp. umgemünzt, zu dem du die Lösung gerade gepostet hast, macht eval ja keinen Sinn, weil man da auf Strukturen zugreift; äquivalent zu gestern )
_________________
Richtig fragen
Debugging
|
|
|
Barny.G |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 17.03.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 20:57
Titel:
|
 |
Hallo Sirius,
vielen Dank - genau das habe ich gesucht!! Jetzt kann ich den Datenwust auch schön durchforsten ohne mir die Finger zu brechen
Viele Grüße
Thomas
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 07.01.2013, 23:58
Titel:
|
 |
|
 |
|
Hallo Seban,
Man würde unbedingt auf EVAL verzichten.
Wenn man bereits die Variablen v1, v2, v3, ..., v97 hat, gibt es keine bessere Lösung mehr. Deshalb muss man einen Schritt früher ansetzen und vermeiden, dass ein solcher Variablen-Wust entsteht.
Das dynamische Erzeugen von Variablen per EVAL hat 6 Nachteile:
1. Das Debuggen wird schwerer.
2. Der Code ist nicht einfach skalierbar. D.h. wenn man mit einem [1x97] Vektor rechnet, lässt sich das leicht auf einen [1x97000] Vektor erweitern. Bei einer v1, ...v97000 Liste wäre das bereits ein Horror.
3. Matlab bearbeitet Schleifen effizient durch die "JIT-Acceleration". Diese funktioniert aber nicht, wenn Variablen erst während des Programmlaufs dynamisch erzeugt werden.
4. Wenn man aus Versehen unerwartete Ausdrücke mit EVAL auswertet, können zerstörerische Dinge geschehen. Es ist unwahrscheinlich, dass in einem Programm plötzlich der String "format C:" an EVAL geliefert wird. Aber in einem EVAL-freien Code ist es eben nicht unwahrscheinlich, sondern unmöglich.
5. EVAL kann dazu führen, dass Code unterschiedliche Ergebnisse liefert, je nachdem ob er im Debug oder Nicht-Debug-Modus läuft:
Im Debug-Modus wird das Symbol "sin" als Skalar definiert und "sin(1)" ergibt 9. Im Nicht-Debug-Modus wird beim Einlesen des M-Files aber der Aufruf der Sinus-Funktion erkannt und 0.8415 ausgegeben.
Da aber jedes größere Programm Bugs enthält, darf das Debuggen nicht beinträchtigt werden.
6. EVAL ist unsexy. Wenn man in einem öffentlichen Forum eine Funktion diskutiert, die ein EVAL enthält, werden alle Profis erstmal ein komplettes Neu-Design empfehlen, selbst wenn einem die Quadratur des Kreises gelungen ist oder man ein np-vollständiges Problem in linearer Zeit lösen konnte. :-)
Gruß, Jan
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 08.01.2013, 21:58
Titel:
|
 |
Ok, dh im Grunde, wenn eval einem sinnvoll erscheint, hat man eine bessere Lösung wahrscheinlich bereits übersehen
Vielen Dank für die ausführliche Erläuterung.
_________________
Richtig fragen
Debugging
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|