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

Vektor bearbeiten, Nur Werte in bestimmte Spalten schreiben

 

OkinawaKaiten
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 18.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2016, 18:36     Titel: Vektor bearbeiten, Nur Werte in bestimmte Spalten schreiben
  Antworten mit Zitat      
Hallo,

ich habe eine Frage zu der Bearbeitung von Vektoren und leider kein Thema dazu gefunden.

Problem: Ich habe Messdaten eingelesen, leider ist die Datenmenge etwas groß. Nun habe ich einige Ergebnissvektoren mit jeweils 18 Millionen Dateneinträgen. Und diese Vektoren 140 mal.
Um die Datenmenge zu verringern, lese ich jetzt aus den Vektoren die Werte aus die einen bestimmten Grenzwert überschreiten.

Code:
  trh = 12345
   for z=1: 123
       ROWS=find(eval(['VEKTORNAME_' num2str(z)])>trh ...
          | eval(['VEKTORNAME' num2str(z)])>trh);
 

So bekomme ich einen Vektor der nur noch genau so viele Einträge hat, wie Einträge des Gesamtvektors den Grenzwert überschreiten. Die Werte der einzelnen Einträge geben die Spalte an.

Bis hier hin funktioniert alles.

Ich möchte jetzt aber zu den Spalten die ich kenne immer noch 1000 Werte vorher und 1000 Werte nachher rausschreiben.

Bisher habe ich das wie folgt gelöst

Code:
anz_vor = 1000;
for i=1:size(ROWS)
        nnn=ROWS(i);
        tmp(anz_vor+1)=nnn;
        for j=1:anz_vor
            tmp(j)=nnn-anz_vor+j-1;
            tmp(1+j+anz_vor)=nnn+j;
        end
        tmp_ges=[tmp_ges;tmp];
    end
    ROWS=sort(tmp_ges);
    ROWS(diff(ROWS) == 0) = [];
    ROWS=ROWS(2:end);
 


Leider ist ein Vorgehen dieser Art Zeitlich nicht möglich, dauert zu lange.
Daher war meine Überlegung mir einen Vektor zu schreiben der überall wo Werte den Grenzwert überschreiten, eine 1 speichert.

BEISPIEL:
x=[1;2;3;4;3;2;1];
alle werte finden >2 und in y speichern
y=[0;0;1;1;1;0;0];

Diesen Vektor wollte ich dann versetzt auf den ursprungsvektor addieren

BEISPIEL:
Um eins versetzt
yneu = [0;0;1;2;1;1;0]

und mir dann alle Zellen speichern die einen Wert >= 1 haben.

Das Problem ist nur ich weiß nicht wie ich die Vektorgröße beibehalte und mir anstatt der Spaltennummer einen Wert in die bestimmte Spalte schreibe.

BEISPIEL:

x = [1;3;5;7;9]
ROWS=find(x > 6);
=> ROWS = [4; 5]
nun hätte ich gerne einen Vektor mit einsen an genau diesen Stellen
Also: z = [0;0;0;1;1]

Ich hoffe das Problem ist verständlich.
Viele Dank im vorraus

Viele Grüße

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
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: 18.02.2016, 19:39     Titel: Re: Vektor bearbeiten, Nur Werte in bestimmte Spalten schrei
  Antworten mit Zitat      
Hallo OkinawaKaiten,

Ich verstehe die Frage noch nicht.
Der Code mit den EVALs ist mir nicht klar. Da sich mir bei EVAL aber sowieso immer die Fußnägel hochklappen, ...
Während Matlab problemlos mit Vektoren rechnen kann, die 18 Millionen Einträge haben, bremst EVAL den Code sehr aus, was schon mal den Faktor 100 ausmachen kann.

Ich möchte jetzt aber zu den Spalten die ich kenne immer noch 1000 Werte vorher und 1000 Werte nachher rausschreiben.

Zitat:
Leider ist ein Vorgehen dieser Art Zeitlich nicht möglich, dauert zu lange.

Ich verstehe die Funktion des gezeigten Codes nicht. Hast Du schon den Profiler bemüht um herauszufinden, was da die Zeit verbraucht? Möglicherweise vergrößerst Du einfach nur einen Array in jeder Iteration, was ja sehr viele Resourcen verbraucht, und eine einfache Pre-allocation würde den Code drastisch beschleunigen.

Zitat:
x=[1;2;3;4;3;2;1];
alle werte finden >2 und in y speichern
y=[0;0;1;1;1;0;0];

Wozu das dienen soll, ist mir noch nicht klar. Kannst Du nochmal erklären, was Du genau erreichen möchtest?

Gruß, Jan
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 - 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.