|
Autor |
Alle Vektoren im Workspace gleich verändern |
|
Spreequellee
Neu  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  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
|
|
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]
|