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

dynamischer Variablenname - alternative zu 'assignin'

 

hobsi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.09.10
Wohnort: BW
Version: Version 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 18.03.2011, 15:54     Titel: dynamischer Variablenname - alternative zu 'assignin'
  Antworten mit Zitat      
Hallo zusammen!

Ich arbeite zurzeit an einem GUI und bin auf der Suche nach einer alternative zu
Code:


Mein Ziel ist es Daten mit einem dynamischen Variablenname abzulegen. Jedoch möchte ich die Daten nicht ins WS übergeben.



Beispiel:

data1 = rand(1,1000);
data2 = rand(1,1000);
...
data100 = rand(1,1000);
...

nun möchte ich
data1 unter dem Namen messung1_kanal1 ablegen und
data2 unter dem Namen messung1_kanal2
...
data100 unter dem Namen messung1_kanal100
...


Das ganze muss in einer schleife stattfinden, deshalb benötige ich dynamische Variablennamen.


Vielen Dank für Eure Hilfe!

Gruß hobsi
Private Nachricht senden Benutzer-Profile anzeigen


Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2011, 16:14     Titel:
  Antworten mit Zitat      
Hallo Hobsi,

ich bin mir relativ sicher, dass du ohne dynamische Namen auskommst.

Was spricht gegen

Code:

%1.Möglichkeit
data(1,:)=rand(1,1000);
data(2,:)=rand(1,1000);
data(3,:)=rand(1,1000);
%usw
%oder falls du unterschiedlich lange Kanäle hast
%2. Möglichkeit
data{1}=rand(1,1000);
data{2}=rand(1,1000);
data{3}=rand(1,1000);
%usw

%messung1_kanal1 am Beispiel der 1. Möglichkeit
messung=struct;
messung(1).kanal=data;
%Auffrufen des 10. Kanals:
Kanal1=messung(1).kanal(10,:);
 
[/code]
 
hobsi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.09.10
Wohnort: BW
Version: Version 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 20.03.2011, 17:19     Titel:
  Antworten mit Zitat      
Erst mal vielen Dank für deinen Vorschlag!!!

Weiß jemand ob beim Ablegen einer Struktur im Arbeitsspeicher der Platz zusammenhängend benötigt wird? Und hat man Geschwindigkeitseinbußen beim Speichern und Laden einer Struktur im Gegensatz zu einer Matrix?




Hier mal noch ein paar Hintergrundinformationen die ich Euch im ersten Eintrag vorenthalten habe Smile


Bei den Daten handelt es sich um Messdaten. Es können bis zu 16 Kanäle sein und einige millionen Werte pro Kanal.

Ich möchte die einzelnen Kanäle erst mal in den Arbeitsspeicher (32GB verfügbar) laden um sie schnell plotten zu können.

Am Ende will ich aber jeden Kanal in einer extra *.mat Datei mit dem Namen 'Messung[laufende Nummer]_Kanal[laufende Nummer]' abspeichern und diese dann nach dem Auswerten der Messdaten mit den ausgewerteten Daten erweitern möchte. Aber in Form einer Matrix.
Das hat den Vorteil dass ich jeweils nur die Matrix laden muss, mit der ich gerade arbeite und nicht die ganze Struktur, die in meinem Fall riesig wäre.


Viele Grüße
hobsi
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 21.03.2011, 14:27     Titel:
  Antworten mit Zitat      
Hallo hobsi,
wenn du das in einer Schleife abspeichern willst, kannst du den Dateinamen so zusammensetzen.
Code:

for i = 1 : 100
 ['messung1_kanal' num2str(i)]
end
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
hobsi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.09.10
Wohnort: BW
Version: Version 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 21.03.2011, 18:13     Titel:
  Antworten mit Zitat      
Hallo Peter, dir auch vielen Dank! Jedoch geht das nur im Zusammenhang mit save und assignin!?


Hier mal mein Code:

Code:

m = 1;              % Messung 1
k = 1;              % Kanal
for k = 1:6
   
    dat = rand(1,10000000);                                                 % Daten erzeugen

    % im AS ablegen
    assignin('base', ['messung' num2str(m) '_kanal' num2str(k)], dat)       % Assignin
   
   
    % Alternative:
    ['messung' num2str(m) '_kanal' num2str(k)] = dat;                       % nicht möglich!!!
   
    name = ['messung' num2str(m) '_kanal' num2str(k)];
    (name) = dat;                                                           % nicht möglich!!!
   
   
    % Speichern
    save ((['messung' num2str(m) '_kanal' num2str(k) '.mat']), 'dat', '-v6')
   
end
 






Hier mal noch ein Geschwindigkeitsmessung zum Abspeichern:

Code:

m = 1; k = 1;    
dat = rand(1,100000000);                                                     % Daten erzeugen

tic
save ((['messung' num2str(m) '_kanal' num2str(k) '.mat']), 'dat')           % Speichern  
toc

k = k+1;

tic
save ((['messung' num2str(m) '_kanal' num2str(k) '.mat']), 'dat', '-v6')    % Speichern mit 'v6'
toc                                                                         % (nur Matritzen!!!)
       
% Ergebnis
% Elapsed time is 39.309073 seconds.
% Elapsed time is 22.357430 seconds!!!
 
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.