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

Alle Vektoren im Workspace gleich verändern

 

Spreequell

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 09:43     Titel: Alle Vektoren im Workspace gleich verändern
  Antworten mit Zitat      
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.

Vielen Dank für eure Hilfe!


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2017, 10:04     Titel:
  Antworten mit Zitat      
Hallo,

das klingt so, als ob du dringend den Workspace besser organisieren solltest. Du kannst dir zwar mit whos eine Liste der Variablen holen, bist aber dann immer auf eval-Befehle angewiesen, die schwierig nachzuvollziehen und zu debuggen sind. Besser wäre es beispielsweise, diese Vektoren alle in einer Struktur zu sammeln.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 10:37     Titel:
  Antworten mit Zitat      
Leider ist mein Messdaten-File so vorgegeben und ich muss die Vektoren verändern und später wieder in einem neuen File mit den gleichen Namen und dieser Struktur abspeichern.

Wie könnte so ein Beispiel Code mit whos und eval befehlen ausehen?

Code:


vars = whos;

Anzahl_Vektoren = length(vars); %Länge dieses Vectors

%Vektor mit den Längen aller Zeitvectoren    
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
 



Das funktioniert leider nicht, aber soewtas in der Richtung habe ich mir vorgestellt.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2017, 11:08     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider ist mein Messdaten-File so vorgegeben

In welcher Form liegen die Messdaten vor und wie importierst du sie?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 11:16     Titel:
  Antworten mit Zitat      
Meine Messdaten-File ist eine .mat-Datei und die Vektoren sind in Form "2000 x1 double" steht jedenfalls so im Workspace.

Code:

MatLoad = fullfile(MatPath,MatFile); % inputFile;
load(MatLoad) % Lade Datei
 


so importiere ich die Daten
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2017, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

dann kannst du die Daten importieren mit
Code:
vectors = load(MatLoad);


Mit fieldnames kannst du überprüfen, welche Vektoren es gibt. Mit
Code:
vectors.(name{i})

kannst du auf einzelne Vektoren zugreifen.

Bei save gibt es dann die Option -struct, mit der du die Felder der Struktur wieder als einzelne Variablen abspeichern kannst.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 11:47     Titel:
  Antworten mit Zitat      
Das Problem bei dieser Variante ist jetzt allerdings, dass meine anderen Funktionen nicht mehr funktionieren, da ich ja keine Variablen wie vorher im Workspace habe.

Das hier ist sozusagen ein Spezialfall, den ich abfangen muss. Ich muss schon eine mit einer Funktion erstellen, die direkt die Variablen verändert ohne diese in anderer Form abzuspeichern.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2017, 13:43     Titel:
  Antworten mit Zitat      
Hallo,

du kannst die modifizierte .mat-Datei ja wie zuvor laden?
Ansonsten musst du dich eben wie gesagt mit eval herumquälen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 13:47     Titel:
  Antworten mit Zitat      
aber wie kann ich die als -sruct bearbeiteten variablen wieder zurück in den Workspace speichern bzw. neu reinladen, wenn die ja jetzt in der "Variable" sruct sind.
 
Spreequell

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 13:54     Titel:
  Antworten mit Zitat      
oh du hattest es oben schon geschrieben, das hab ich wohl überlesen.

Jetzt aber noch eine Frage.

Ich kann mit deinem Befehl
Code:

vectors.(name{i})
 


auf den vektor zu greifen, wie kann ich direkt dort die Werte verändern, so in dieser Form
Code:

vectors.(name{i}) = (500:1000) = 0
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2017, 14:11     Titel:
  Antworten mit Zitat      
Hallo,

hier anhand eines Beispiels:

Code:
%% Create data
v1 = rand(100,1);
v2 = randn(1000,1);
v3 = rand(1000,1);
vector4 = randn(100,1);
save vs

%% Set elements 200:300 of vectors of length 1000 to 0
clear
vectors = load('vs.mat');
names = fieldnames(vectors);
for k = 1:numel(names);
    if length(vectors.(names{k})) == 1000
        vectors.(names{k})(200:300) = 0;
    end
end
save('vs_mod.mat', '-struct', 'vectors')

%% Load data
clear
load vs_mod.mat


Grüße,
Harald
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.