WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablen im aktuellen WS erzeugen

 

MenschMeier
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 22.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2011, 16:41     Titel: Variablen im aktuellen WS erzeugen
  Antworten mit Zitat      
Hallo,
ich lese mittels importdata eine ASCII Datei ein, in der Messwerte und deren Titel stehen. Ich habe schon eine Funktion, die alle Messvariablen mit dem zugehörigen Namen als Basevariablen speichert.

assignin('Base', genvarname(newData1.colheaders{i}), newData1.data(:,i));

Das soll so sein, damit der User sich nun die benötigte variable raussucht und in die nächste Funktion eingeben kann.

Nun möchte ich aber eine andere Sache mit diesen Variablen machen, ich möchte sie in eine .mat File speichern. Eigentlich ganzzzz einfach, dachte ich. Aber leider kann ich nicht direkt aus einer Funktion auf Base zugreifen. Sad

Eigentlich müsste man die variablen doch gleich so erzeugen können, dass sie von der Funktions aus aufrufbar sind. Ich habs mit Caller statt Base in Assignin versucht, aber das hat nichts gebracht.

Wie kann ich dynamische Variablen erzeugen, die ich in der gleichen Funktion verwenden kann, ohne evalin?

Danke
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.10.2011, 16:48     Titel:
  Antworten mit Zitat      
Hallo,

ich würde auf Dauer nicht empfehlen, mit importdata zu arbeiten.
textscan gibt mehr Kontrolle darüber, was man tut, und vermeidet dieses unangenehme assignin.

Wenn du aber schon dabei bist: du weißt ja, welche Variablen es geben wird (colheaders). Warum nicht den User an dieser Stelle fragen, welche Variablen er haben will, und nur diese überhaupt im Base Workspace anlegen?

Und etwas weitergehend: warum überhaupt Variablen mit dynamischen Variablennamen? Das verursacht generell mehr Probleme als es löst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MenschMeier
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 22.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2011, 17:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

also in einer der einzulesenden Dateien sind 80 Variablen (Spalten) und 48.000 Werte (Zeile) + die Name und Einheiten etc. (1-8 Zeile)

Die Einlesefunktion hatte mein Dozent schon geschrieben und ich sollte nur darauf aufbauen, daher würde ich gern Importdata lassen (wenns geht).

Die dynamsichen Namen sollen sein, da die 80 variablen eindeutig betitelt werden sollen und nicht nur durchnummeriert o.ä.

Meine derzeitige Aufgabe ist es, anstatt der ASCII Input Datei eine .mat Datei zu erzeugen, die alle Variablen enthält und die Inputdatei ersetzt. Am liebsten hätte er alle Variablen mit den jeweiligen Titel und den zugehörigen Messwerten in eine .mat datei exportiert. Im Prinzip ist das ja auch alles schon in der Import funkion intigriert, da diese die variablen mit Namen in Base schreibt, nur bekomme ich sie daraus eben nicht in einem .mat Datei.

Bekäme ich mit textscan die Variabeln besser abgespeichert?

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.10.2011, 19:11     Titel:
  Antworten mit Zitat      
Hallo,

möglich ist das natürlich. Wenn du den assignin-Befehl durch etwas derartiges ersetzt:
Code:
eval([genvarname(newData1.colheaders{i}), '=',newData1.data(:,i)]);

sollten die Variablen im momentanen Workspace erzeugt werden.

Ich möchte jedoch noch einmal betonen, dass ich die Vorgehensweise insgesamt nicht für gut halte.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MenschMeier
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 22.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2011, 19:26     Titel:
  Antworten mit Zitat      
Ja, dass hatte ich auch schon versucht, aber das dauert ziemlich lang. Gerade weil ich etwa 300 von diesen Inputfiles einlesen möchte.

Welche Vorgehensweise würdest du denn vorschlagen? Ich kann die Einlesefunktion ja auch ändern, wenn das zu einem besseren Ergebnis führt.

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.10.2011, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

du kannst ja auch mit dem Profiler anschauen, welcher Teil des Programms wie lange braucht. Ich kann mir nicht vorstellen, dass die EVAL-Anweisung lange braucht.

Mit TEXTSCAN hättest du die Möglichkeit, von vorneherein nur die Spalten einzulesen, die von Interesse sind (wenn das denn vorab bekannt ist). Zudem ist zu vermuten, dass TEXTSCAN generell schneller ist - IMPORTDATA muss ja zunächst immer erst mal feststellen, was für eine Art Datei es ist etc.

Wie groß sind die Dateien in etwa, und wie lange dauert das Einlesen der 300 Dateien?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MenschMeier
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 22.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2011, 21:46     Titel:
  Antworten mit Zitat      
Eine Datei ist in etwa 48 Mb groß und hat 80 Spalten und 48.000 Zeilen. Das einlesen und aushaben mittel assignin dauert etwa 10 sekunden. Wenn ich aber statt dem assignin Befehl eval( ...) eingebe und mir damit die Variablen erstellen lasse, dann bracht er ziemlich lange. Würde schätzen über eine Minute. Ich teste es morgen mal mit den Profiler durch.

lg und gn8
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.10.2011, 08:12     Titel:
  Antworten mit Zitat      
Hallo,

das würde mich sehr wundern. Bitte sicherstellen, dass keine anderen Effekte im Spiel sind. So kann es sein, dass Dateien sich möglicherweise noch im Arbeitsspeicher befinden, wenn das Skript das erste Mal ausgeführt wird, und damit schneller geladen werden, als wenn sie tatsächlich von der Festplatte kommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.