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 in kleinere zerlegen

 

Cecile

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2015, 11:05     Titel: Vektor in kleinere zerlegen
  Antworten mit Zitat      
Hallo liebe Community,

ich habe wahrscheinlich eine einfache Frage, aber ich komme einfach nicht weiter.

Zum Problem:
Ich habe einen Vektor der 168000 samples gross ist und der überall Null ist ausser an einigen Stellen. Nun würde ich gerne ein Programm erstellen das diese Stellen findet (es sind insgesamt 4, ich hänge den Plot mal an) und in einen eigenen Vektor bzw in eine Matrix abspeichert.

Ich hoffe mir kann wer von euch helfen.
Vielen liebsten Dank!
Cecile

plot_Values.mat
 Beschreibung:

Download
 Dateiname:  plot_Values.mat
 Dateigröße:  3.53 KB
 Heruntergeladen:  355 mal
Plot.fig
 Beschreibung:

Download
 Dateiname:  Plot.fig
 Dateigröße:  1.83 MB
 Heruntergeladen:  422 mal


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 26.06.2015, 11:26     Titel:
  Antworten mit Zitat      
Ja, es ist recht einfach.

Code:

load plot_Values
plot(find(B))
 


Oder entsprechend mit Zuweisung von Variablen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Cecile

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2015, 11:34     Titel:
  Antworten mit Zitat      
Hallo Andreas,

hmm das ist nicht ganz das was ich meinte Sad

Ich habe eher daran gedacht eine Schleife über meinen Vektor B läuft und sobald dieser das erste mal nicht Null ist alle Werte in einen eigenen Vektor oder die Spalte einer Matrix packt bis der Wert wieder auf Null abfällt. Danach weiter läuft und dann wieder ab ansteigenden Werten diese in die nächste Spalte/Vektor packt usw..
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 26.06.2015, 13:16     Titel:
  Antworten mit Zitat      
Gut, dann ist der gewünschte Algorithmus ja in Worten formuliert und muss nur umgesetzt werden. Schleife is bei vielen verpönt, weil nicht elegant und oftmals langsam, aber als Start, warum nicht.

Das Schwierige an diesem Datensatz ist, dass es ja nicht diese 4 Zusammenhängenden Bereiche sind, sondern Lücken da sind. Z.B.:

Code:

load plot_Values
plot( B(167691:167791) )
 


Man benötigt also eine Definition, wann eine neuer Bereich / Ereingnis anfängt und aufhört. Ein Sprung von oder nach Null ist es auf jeden Fall nicht.

Manchmal sind Schwellwerte sinnvoll und Filterung. Hängt aber alles vom Projekt ab und ist keine Sache des Codens.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Cecile

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2015, 09:07     Titel:
  Antworten mit Zitat      
Das hier ist nun meine Lösung und damit kann der Thread geschlossen werden Wink
Am Ende wird alles in einer Matrix A gespeichert.

Code:

for i=1:200000
    if PS_Data(i) >= 136
       
        B(i,:) = PS_Data(i);
       
    end
end

B = B(B~=0);
B = B(1:5000);

A = reshape(B,1000,[]);
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 29.06.2015, 09:39     Titel:
  Antworten mit Zitat      
Sehr schön. Ich bin mir aber sicher das geht noch schneller. Was ist denn "PS_Data"? In der ursprünglichen Fragestellung gab es ja schon ein "B".

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Cecile

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2015, 09:56     Titel:
  Antworten mit Zitat      
Für mich reicht das von der Geschwindigkeit.
Es geht bestimmt noch optimaler, aber dass klappt soweit.

PS_Data ist der eigentliche Datensatz und in B wird dieser einfach nur abgespeichert bzw alles was über oder gleich 136 ist.

Vielleicht noch eine Anmerkung zu den Ausdruck
Code:
B = B(1:5000)

Der Vektor B enthielt 5003 Werte und so habe ich die letzten drei Werte abgeschnitten, damit der reshape Befehl klappt.

Also wie gesagt, für mich ist das Programm mehr als ausreichend.
Vielen Dank für die Denkanstösse Smile

Cecile
 
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.