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

Löschen von Arrays aus schleife

 

RatioTM
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 24.04.18
Wohnort: Genf
Version: ---
     Beitrag Verfasst am: 05.07.2018, 23:14     Titel: Löschen von Arrays aus schleife
  Antworten mit Zitat      
Hallo,

ich habe eine Schleife kreiert, die mir immer wenn ein neuer Run an unserem Experiment startet die Zeit und die Daten der Instrumente in einem double Array für den Zeitraum zusammenfasst. Grundlage ist dass das Laborbuch stets einen Anfangs und einen Endwert für die Zeit gibt wenn Mitarbeiter einen neuen Run starten.
Das ganze sieht wie folgt aus:
Code:


for i=1:length(runtime)
    [m1,n1]=find(Beam_time==runtime(i,1))
    [m2,n2]=find(Beam_time==runtime(i,2))
    O= [Beam_time(m1:m2) B(m1:m2)]
    j=1:length(O)
    eval(['time',int2str(i),'=O'])
% if      
%  time==[]
%         any(time)
%     end

  end
 


Wobei runtime die Zeit ist, die im Laborbuch steht und Beamtime die Zeit vom Instrument (B sind die Daten).
Diese schleife baut mir bei 473 runs 473 matrizen wobei die matrizen die ich brauche korrekt ausgefüllt werden. Sie hat jedoch einen Schönheitsfehler: Sie baut daneben insgesamt hunderte leerer Matrizen mit Namen time1 bis time(length(runtime)) die ich gerne löschen würde.
Im Auskommentierten bereich seht ihr meine Idee dazu, die bisher jedoch nicht funktioniert, da jede Matrix einen anderen Namen hat...wie kann ich hier vorgehen?

Vielen Dank und VG
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.07.2018, 12:20     Titel: Re: Löschen von Arrays aus schleife
  Antworten mit Zitat      
Hallo RatioTM,

Es ist grundsätzlich eine sehr schlechte Idee, Variablen dynamisch mit eval zu erzeugen. Nach hunderten von Diskussionen in diesem Forum kann deutlich werden, dass dies immer mehr Probleme erzeugt als löst.

Es wäre viel sinnvoller und effizienter, klarer und übersichtlicher statt eines Haufens von Variablen ein Array zu erzeugen:
Code:
count = 0;
time = cell(1, size(runtime, 1));   % Pre-allocation!
for i=1:size(runtime, 1)   % Nicht LENGTH!
    [m1,n1] = find(Beam_time==runtime(i,1))
    [m2,n2] = find(Beam_time==runtime(i,2))
    if ~isempty(m1) && ~isempty(m2)
      count = count + 1;
      time{count} = [Beam_time(m1:m2) B(m1:m2)];
  end
end
time = time(1:count);  % Crop unused elements


length ist tückisch, wenn man es auf Matrizen anwendet: Es wird die längere der beiden Dimensionen zurückgegeben. Die Matrix könnte aber zufällig berieter als hoch sein. Deswegen ist size(X, 1) immer besser um die Anzahl der Zeilen zu bekommen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
RatioTM
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 24.04.18
Wohnort: Genf
Version: ---
     Beitrag Verfasst am: 07.07.2018, 18:12     Titel:
  Antworten mit Zitat      
Vielen Dank fuer die Hilfe und Tipps!

Der Code erfuellt genau, was ich mit meiner Schleife urspruenglich bauen wollte!

Beste Gruesse!
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 - 2024 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.