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

Mehrere Variablen (Arrays) auf einmal gleich manipulieren

 

ra

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2013, 09:42     Titel: Mehrere Variablen (Arrays) auf einmal gleich manipulieren
  Antworten mit Zitat      
Hi,

ich habe verschiedene Variablen, bei denen ich gerne die gleichen Operationen durchführen möchte.

Bsp:
Code:
% Variablen werden initialisiert
bla1=11x3 double, bla2=5x3 double, bla3=..

% Manipulation Nr1. Alle NaN Zeilen werden gelöscht.
bla1(isnan(bla1(:,2)),:)=[];
bla2(isnan(bla2(:,2)),:)=[];
bla3(isnan(bla3(:,2)),:)=[];
bla4(isnan(bla4(:,2)),:)=[];
..

% Manupulation Nr2..
bla1()..



Ich finde das etwas umständlich, da die Blöcke der Manipulation doch etwas länglich werden. Ich habe folgendes schon versucht:

Code:
schnitt=char('bla1','bla2','bla3','bla4');

for s=1:length(schnitt(:,1))
    assignin ('base','tmp', schnitt(k,:));
    tmp(isnan(tmp(:,2)),:)=[];
end


Das scheitert leider, da tmp() nicht das selbe ist wie bla1(), bla2(),..


Kann mir bei dem Problem jemand weiterhelfen?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.08.2013, 09:55     Titel:
  Antworten mit Zitat      
Hallo,

die Ursache des Problems ist die Durchnumerierung der Variablen.

Vorschlag: lege die verschiedenen Variablen in einem Cell Array (falls sie wie hier angedeutet durchnumeriert sind) oder in einer Struktur (falls sie echte Namen haben sollen) ab.
Dann kannst du in einer for-Schleife bequem über die Elemente des Cell Arrays bzw. der Struktur iterieren.

Code:
% Variablen werden initialisiert
bla{1}=11x3 double, bla{2}=5x3 double, bla{3}=..

% Manipulation Nr1. Alle NaN Zeilen werden gelöscht.
for I=1:numel(bla)
bla{I}(isnan(bla1(:,2)),:)=[];
end


Grüße,
Harald

P.S.: du schreibst zwar "auf einmal", meinst aber vermutlich "nacheinander"?
Private Nachricht senden Benutzer-Profile anzeigen
 
Ra

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2013, 12:28     Titel:
  Antworten mit Zitat      
Hallo!

Vielen dank für die schnelle und gute Antwort. Mit dieser Methode funktioniert das wunderbar.

Was mich aber leicht stört, ist dass ich dann all meine Variablen mit Namen: bla, test, keks,.. in einen struct packen muss. Und keine Eindeutigen Namen mehr habe.

Gibt es denn keine Möglichkeit die Variablennamen in einen string Array zu packen und diese Namen wieder als Variable anzusteuern?
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.08.2013, 12:43     Titel:
  Antworten mit Zitat      
das ist sehr umständlich und mag auf den ersten blick sinnvoll erscheinen... ist es aber meist nicht. wichtige daten im namen unterzubringen oder den index ist nie gut. es muss mit aufwand reingebracht werden und mit noch mehr aufwand wieder ausgelesen werden. ein index sollte immer als index verwendet werden und nicht im namen. bla ist ein eindeutiger name bla1 bla2 hingegen enthalten bereits informationen die besser in bla stehen sollten und nicht im namen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 30.08.2013, 12:49     Titel:
  Antworten mit Zitat      
Hallo Ra,

die Möglichkeit gäbe es schon und zwar mit eval, wobei man sich vorher überlegen sollte, ob es nicht sinnvoller ist, seine Datenstruktur entsprechend zu ändern. Variablen im Namen durchzunummerieren à la "bla1, bla2... bla42" führt früher oder später immer zu solchen Problemen, dass man sich schwer tut darauf zuzugreifen. Hier sind z.B. Cell-Arrays wie Harald sagte eigentlich besser geeignet.

Viele Grüße
Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Und keine Eindeutigen Namen mehr habe.

Über die Feldnamen bleibt die Zuordnung eindeutig.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2013, 12:56     Titel:
  Antworten mit Zitat      
Danke für eure Antworten. Wir Ihr sagt wird das sehr unschön mit dem auslesen.
Werde bla, keks, blub nun doch in einen struct schreiben.

@Harald: mit "auf einmal" war nacheinander gemeint. Wobei man natürlich die Schleife, welche man dann benötigt mit parfor auswerten lassen kann.
 
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.