Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Alle Vektoren im Workspace gleich verändern
Autor
Universität/Hochschule Alle Vektoren im Workspace gleich verändern
Spreequellee
Neu Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 13.04.2017
Mitteilungen: 1
  Themenstart: 2017-04-13

Hallo Leute, ich bin Matlab Neuling und habe folgendes Problem: Ich lade eine Messung in meinen Workspace und muss (fast) alle Vektoren darin verändern. Die Vektoren tragen alle unterschiedliche Name, was das ganze etwas schwieriger gestaltet. Ich muss (fast) alle Vektoren in einem bestimmten Bereich auf Null setzen. Ich wollte eine if-Bedingung einbauen, die die Länge prüft. Die Vektoren, die ich verändern muss haben die Länge [2000 , 1] In diesen Vektoren muss der Bereich (500:1000) auf Null gesetzt werden, also Beispielvektor(500:1000)=0; Ich habe etwas von "Whos" gelesen, um alle Vektoren in einer Liste zu schreiben und dann mit einer Schleife danach zu suchen. Genau weiß ich allerdings nicht, wie ich das umsetzen könnte. vars = whos; Anzahl_Vektoren = length(vars); %Länge dieses Vectors for i=1:Anzahl_Vektoren If vars(i).size > 100 % Vektoren finden, die [2000 ,1] groß sind vars(i)(500:1000)=0; % Vektor an der Stelle auf Null setzen else vars(i)=vars(i); end end Vielen Dank für eure Hilfe!


   Profil
Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen.
Kitaktus
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.09.2008
Mitteilungen: 7234
Wohnort: Niedersachsen
  Beitrag No.1, eingetragen 2017-04-13

Folgendes funktioniert wahrscheinlich: \sourceon Matlab vars = whos; Anzahl_Vektoren = length(vars); %Länge dieses Vectors for i=1:Anzahl_Vektoren % Vektoren finden, die [2000 ,1] groß sind if max(vars(i).size) == 2000 && min(vars(i).size) == 1 eval([vars(i).name,'(500:1000)=0;']); end end \sourceoff Die Überprüfung ob ein Vektor die Größe 2000x1 hat habe ich etwas verfeinert, 2000 x 1- und 1 x 2000-Vektoren werden verändert, aber 1500 x 1- oder 2000 x 3-Vektoren nicht mehr. Der eval-Befehl ist ein Griff in die schmutzige Trickkiste. Hier wird zur Laufzeit ein irgendwie erzeugter String als Codezeile interpretiert und ausgewertet. Man holt sich den Namen der Variable aus vars(i).Name, hängt den String '(500:1000)=0;' an und lässt den Code ausführen. Den eval-Befehl sollt man mit Vorsicht verwenden, da man damit auch Missbrauch betreiben kann. Es könnte (theoretisch) eine Variable so benannt sein, dass der eval-Befehl ungewollten Code ausführt. Wer kennt eine Möglichkeit, direkter auf die Variable zuzugreifen?


   Profil

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]