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

Variable einen Namen als String zuweisen

 

Slamdunker23
Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 24.01.2014, 15:14     Titel: Variable einen Namen als String zuweisen
  Antworten mit Zitat      
Hallo zusammen.

Ich gebe euch mal ein einfaches Beispiel. In meinem Fall ist das Beispiel in einer Schleife und betrifft ungefähr 1000 Variablen.

Ich definiere eine Variable:

Code:

a = [1,2,3,4];
new_string_a = 'b';
 


Wie kann ich den String new_string_a der Variable a zuweisen?

Vielen Dank für eure Hilfe!

Slamdunker23
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2014, 18:14     Titel:
  Antworten mit Zitat      
Die Frage verstehe ich nicht. Du weist doch new_string_a den String 'b' zu. Genauso kannst Du mit
Code:
a = 'new_string_a';

der Variable a den String 'new_string_a' zuweisen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 27.01.2014, 09:26     Titel:
  Antworten mit Zitat      
Guten Morgen!
Ja ich glaube, du hast mich falsch verstanden Smile

Ich will nicht den Wert der Variable a [1,2,3,4] ändern, sondern die Variablenbezeichnung.

Also zum Anfang definiere ich eine Variable a = [1,2,3,4].
Irgendwann im Skript bekomme ich einen String 'b' und diesen String will ich dem Wert der Variable a zuweisen.

Da das in einer Schleife passiert kann ich nicht sagen b = a.

Ist das verständlicher? Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 27.01.2014, 10:04     Titel:
  Antworten mit Zitat      
Du möchtest also eine Variable mit dynamischem Variablennamen?
Dafür gibt es ungünstige Möglichkeiten, wie man es umsetzen kann (Stichwort eval oder assignin). Wenn du nach "dynamischer Variablenname" suchst, solltest du auch Antworten finden.
Davon rate ich aber ab.

Sinnvoller ist es, mit einem Strukt oder Cellarray zu arbeiten.
Bsp.:
a.values = [1,2,3,4];
a.varName = 'b';

Damit kann man ebenso alles machen, es läßt sich aber ohne Folgeprobleme sinnvoll damit umgehen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 27.01.2014, 12:54     Titel:
  Antworten mit Zitat      
Hallo Martina.
Okay ich habe noch nie mit structures gearbeitet.
Wie definiere ich jetzt, dass die Werte aus dem structure a [1,2,3,4] dem varName aus structure a 'b' zugeordnet werden, sodass ich am Ende eine Variable mit der Bezeichnung b und den Werten [1,2,3,4] im Workspace habe?

Vielen Dank!

Ich glaube ich denke viel zu kompliziert...danke für deine Hilfe.

Gruß, Slamdunker23
Private Nachricht senden Benutzer-Profile anzeigen
 
felix
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 16.01.14
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 27.01.2014, 13:16     Titel:
  Antworten mit Zitat      
Hallo Slamdunker,
eine schnelle Lösung für dein Problem wäre z.B.:

Code:

Eingang = 1:20; % Ein array mit Werten, die in die Ausgabe geschrieben werden.
Variablenname = 'Ausgabe_';
for VariablenIndex = 1:20
    eval([Variablenname num2str(VariablenIndex) '=' num2str(Eingang(VariablenIndex))])
 
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 27.01.2014, 14:57     Titel:
  Antworten mit Zitat      
Hallo Slamdunker23,
Zitat:

Ich glaube ich denke viel zu kompliziert...

an dem Punkt kommt fast jeder mal an, wenn er was in Matlab macht. Die Versuchung etwas mit eval zu machen ist riesig... bringt aber nur noch mehr hirnverknotungen und zieht nur weitere "eval"s nach sich.
Du könntest z.B. versuchen mit Structs und DynamicFieldnames zu arbeiten.
Code:
a = [1,2,3,4];
new_string_a = 'b';
DynamicStruct.(new_string_a)=a;


Alternativ kannst du vielleicht auch einen etwas größeren Umfang deines Programms posten und wir können dir vielleicht helfen, das komplizierte Konstrukt zu entwirren.

Grüße
Chris
_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 27.01.2014, 16:24     Titel:
  Antworten mit Zitat      
Okay, vielleicht denke ich doch viel zu kompliziert.

In meinem Workspace sind mehrere Variablen (Typ: double), die alle in ihrem Namen einen bestimmten Zusatz haben (Geschwindigkeit_Test, Zeit_Test, Datum_Test).
Das einzige was ich will ist, die Variablen unter einem neuen Namen, ohne den Zusatz _Test, speichern.

Mein Ansatz war, dass ich die einzelnen Variablen in einer Schleife durchlaufen lasse und jeweils den neuen Variablennamen bestimme und diesen dann dem ursprünglichen Variablenwert wieder zuschreibe.

Ist das verständlich?
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 27.01.2014, 16:30     Titel:
  Antworten mit Zitat      
Hallo Slamdunker,
woher bekommst du denn die Variablen (Geschwindigkeit_Test, Zeit_Test, Datum_Test)? Kann bei deren Erstellung nicht auf "sinnvolle" Weiterverarbeitbarkeit geschaut werden? Z.B. an diesem Punkt schon mit Cell-Arrays oder Structs arbeiten.
Natürlich kannst du die einzelnen Variablen durchgehen und diese wieder "zurechtstutzen", aber da wären wieder bei komplizierten/schwer debugbaren eval-Konstrukten Rolling Eyes .

Grüße
Chris
_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 27.01.2014, 16:48     Titel:
  Antworten mit Zitat      
Hallo Chris.
Die Werte lese ich aus einem MAT-File in den Workspace.
Somit liegen sie als 1x1 structure vor.

Ist das ein besserer Ausgangspunkt?

Gruß, Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2014, 21:44     Titel:
  Antworten mit Zitat      
Code:
daten = load('daten.mat');
daten_neu = struct();
fields = fieldnames(daten);
for k=1:length(fields)
   name = fields{k};
   daten_neu.(name(1:end-5)) = daten.(name);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 28.01.2014, 15:42     Titel:
  Antworten mit Zitat      
Super. Ich bin nun soweit, dass ich mein Output-Structure erzeugt habe.
Das structure besteht aus 300 Variablen und jede Variable hat 12000 Werte.

Ich habe nun mehrere Möglichkeiten versucht, dieses Structure als xls oder txt (csv) Datei zu speichern.
Dazu habe ich versucht, das structure in ein Cell-Array umzuwandeln, doch da stürzt Matlab jedes Mal ab. Ich denke, dass das Array zu groß ist für meine Hardware Smile

Gibt es eine direkte Möglichkeit das Structure umzuwandeln oder wie würdet ihr es exportieren?

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 19:41     Titel:
  Antworten mit Zitat      
Was hast Du versucht? Wenn alle Vektoren gleich lang sind, sollte »struct2cell« mit »cell2mat« eigentlich funktionieren. Das dann als csv zu schrieben, ist dann nur noch eine Kleinigkeit.
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 29.01.2014, 15:32     Titel:
  Antworten mit Zitat      
Hallo. Hier mal der Code:

Code:

Data_NEDC_Output_cell = struct2cell(Data_NEDC_Output);
Fields_NEDC_Output = fieldnames(Data_NEDC_Output);
Output_Header(1,:) = Fields_NEDC_Output;
for i = 1:length(Fields_NEDC_Output)
    Output_Data(:,i) = num2cell(Data_NEDC_Output_cell{i});
end
Output = [Output_Header;Output_Data];
 


In der for-Schleife bricht Matlab zusammen.

Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.01.2014, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

num2cell ist bei großen Datenmengen keine gute Idee, da somit ein Zeiger auf jede Zahl erzeugt wird (und die Zeiger letztlich mehr Speicherplatz benötigten als die Zahlen an sich).
Code:
d = rand(10000,1);
c = num2cell(d);
whos c d


Hast du es mal wie von Sirius vorgeschlagen mit struct2cell und cell2mat versucht?

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.