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

Zeilen löschen, die keine "ganzen" Zahlen sind

 

senni
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2015, 17:24     Titel:
  Antworten mit Zitat      
Hallo,

ich habe ein ähnliches Problem. Nur würde ich gerne alle Zeilen löschen, die keine "ganzen" Zahlen sind. Also alles was 1,003s, 2,3s usw ist. Die Zeitreihe hat momentan über 50.000.000 Zeilen und ist damit viel zu groß.

Meine Matrix beinhaltet in der ersten Spalte die Zeit und in der zweiten einen Wert. Wäre wirklich super, wenn ihr mir bei dem Code helfen könntet.
Meine Überlegung war eine for-Schleife die von 1 immer hochzählt und den Schwellenwert neu setzt, aber irgendwie bekomme ich es nicht hin.
Oder man rundet die Werte vorher und vergleicht dann, mit einer if-Schleife, ob sie dem nächsten Wert entsprechen und wenn ja, löscht man die Zeile. Leider schaffe ich es nicht, ein entsprechenden Code zu schreiben.

Code:

m=[tout, TzuEWS];
schwellwert = 1;
zeitenKleinerSchwellwert = m(:,1) < schwellwert;
m(zeitenKleinerSchwellwert,:) = [];


Die Zeitreihe geht bis 2.588.400 s. Im nächsten Schritt würde ich dann nur jede 60. Sekunde, also 1 Minute speichern.

Code:

m=m(1:60:end,:);
 



Da die Zeitschritte variieren, muss ich es so umständlich machen
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 05.09.2015, 18:53     Titel:
  Antworten mit Zitat      
bitte keine alten thread karpern.
Zitat:
Meine Überlegung war eine for-Schleife die von 1 immer hochzählt und den Schwellenwert neu setzt, aber irgendwie bekomme ich es nicht hin.

das ist keine gute fehlerbeschreibung. ich kann in deinem code auch keine forschleife entdecken.
Zitat:
Oder man rundet die Werte vorher und vergleicht dann, mit einer if-Schleife

eine if-schleife gibt es nicht.
ich würde mit round und logischen indizieren arbeiten ohne schleifen.
für den zweiten teil könnte ich mir vorstellen mod zu benutzen
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
senni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2015, 19:16     Titel:
  Antworten mit Zitat      
Sorry, ich wollte keinen neuen Thread aufmachen, wenn sich meine Frage auf den alten bezieht, bzw. dem ähnelt.

Ich habe das nicht in einen Code umsetzen können, daher findet sich auch keine for-Schleife in meinem Code. Das wollte ich mit dem Schwellenwert-Code aus diesem Thread umsetzen. Nur müsste man dann ja eine neue Matrix erstellen, deren erste Zeile die erste Zeile der alten Matrix darstellt. Erhöht man jetzt den Schwellenwert um eins, müsste jetzt aber die 1. Zeile in die zweite Zeile der neuen Matrix geschrieben werden usw... Leider weiß ich absolut nicht, wie man das in einem Code schreibt.

Wie würde das mit dem mod funktionieren? Ich bin leider totaler Anfänger... So wie ich es verstanden habe, gibt es den Rest aus?

Vielen Dank schonmal für die Antowrt!
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 05.09.2015, 19:58 Uhr von Winkow
Von Beitrag Matrix Daten löschen ohne Schleife? aus dem Forum Programmierung
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 05.09.2015, 20:03     Titel:
  Antworten mit Zitat      
beitrag geteilt. verwandtes thema hier:
http://www.gomatlab.de/viewtopic.ph.....23d99f96c5a0f8ba2249bc911
sry ich bin nicht auf die schwellwert methode eingegangen weil ich keinen sinnvollen zusammenhang zu deiner frage gesehen habe. bitte erkläre nochmal was der schwellwert mit ganzen zahlen zu tun hat?
warum versuchst du es nicht mit round und logischen indizieren wie ich vorgeschlagen hab? du musst ja nur gucken welche zeilen ihrem gerundeten wert entsprechen und alle anderen löschen.
Code:
a(round(a(:,1))~=a(:,1),:)=[]

Zitat:
Wie würde das mit dem mod funktionieren?

wenn du nur alle 60sek werte haben willst ist die zahl also restlos durch 60 teilbar oder?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
senni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2015, 20:55     Titel:
  Antworten mit Zitat      
Sorry, das mit den "ganzen" Zahlen war völlig falsch ausgedrückt von mir.. tatsächlich gibt es in der Zahlenreihe nur zwei Zeilen (Anfangs- und Endwert) die keine Kommastellen besitzen. Der Code von dir funktioniert daher, speichert mir aber dann nur die zwei Zeilen. Die Zahlenreihe sieht bspw. wie folgt aus:

0 20
0,0100000000000000 20,5214597165162
0,0200000000000000 21,0102704778657
0,0574597595608982 22,5852359088327
0,100913309818150 23,9923600856256
0,975824518050485 28,2475362909541
1,00961034570137 28,2499788789789
1,04219518426418 28,2518932600377
1,07446992021885 28,2534552006150
1,37251366323509 28,2608492954465

usw usw usw... ich wollte jetzt das ganze runden und dann sieht es bspw. so aus:

0 28
0 28
1 28
1 28
1 28
2 28
2 28

jetzt würde ich gerne jeweils nur eine Zeile mit 0,1,2,... speichern und alle anderen löschen. Daher dachte ich man könnte das mit dem Schwellenwert und einer for-Schleife lösen.

Oder ich schneide es eeinfach auf zwei Nachkommastellen ab (oder eine) ohne runden... dann habe ich ja mehr Treffer bei den "ganze" Zahlen..
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 05.09.2015, 21:03     Titel:
  Antworten mit Zitat      
dann halt erst runden und dann unique benutzen. ob das wissenschaftlich sinnvoll is zweifel ich an aber das ist das was du willst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
senni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2015, 22:13     Titel:
  Antworten mit Zitat      
Super vielen, vielen Dank!!
Ja, dass es wissenschaftlich nicht korrekt ist, weiß ich. Jedoch habe ich auch nur Studenwerte die ich schon auf Sekundenwerte aufgeteilt habe, was ja schon ein großes Fehlerpotential bietet. Von daher ist eine genauere Betrachtung kleiner von s auch nicht mehr wissenschaftlich.

Eine Frage habe ich nur noch. Wenn ich den Code wie folgt eingebe:
Code:

speichert es mir nur die erste Spalte.

Gebe ich es so ein:
Code:
m5=unique(m2, 'rows');

nimmt er zwar beide Spalten mit, schreibt aber dennoch mehrere Zeilen doppelt, wenn sich diese in Spalte2 unterscheiden.

Gibt es hierfür vielleicht noch eine Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 05.09.2015, 22:41     Titel:
  Antworten mit Zitat      
hallo immer die dokumentation genau lesen. unique hat weitere rückgabe werte. du willst nicht die unique werte sondern deren position in der ursprungs matrix. mit deren hilfe baust du dann die neue matrix.
_________________

richtig Fragen
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.