|
|
Alle Zeilen nach bestimmtem Wert löschen |
|
andi_0815 |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.04.2010, 15:46
Titel: Alle Zeilen nach bestimmtem Wert löschen
|
 |
Hilfe ,
ich habe eine 65460x13 Matrix, in der verschiedene Profile (immer 120 Zeilen lang mit Tiefenwerten zwischen 11 und 130 m) immer durch eine NaN-Zeile getrennt sind.
In den Spalten 1-7 befinden sich Messerte und in der 8. eine Art Wertung der Messung.
Wenn in der 8. Spalte der Wert >= 100 erreicht wird können alle Messwerte ab diesem Punkt verworfen, also alle Zeilen gelöscht werden (bis zu dieser besagten NaN-Zeile, denn da beginnt ja ein neues Profil). Ab der Zeile mit der >=100 in Spalte 8 nehmen die Werte in dieser Spalte auch wieder ab, sie bleiben also nicht über 100 (sehen quasi genauso aus, wie die Werte vor der 100er Zeile).
Ich hoffe ich hab euch jetzt nicht verwirrt...
Was ich bisher habe ist leider nicht viel:
Ich weiß nicht, wie ich "alle Zeilen nach der 100 bis zum NaN" in Matlabisch übersetzen soll.
Bedankt!
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 08.04.2010, 16:16
Titel:
|
 |
Hallo,
bin mir nicht sicher, ob ich richtig verstanden habe , willst du die Zeilen löschen oder nicht?
wenn löschen dann so:
|
|
|
andi_0815 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.04.2010, 21:49
Titel:
|
 |
Danke,
aber mit diesem Code lösche ich ja nur die 1-2 Zeilen mit der >= 100 drin, nicht aber die die danach folgen.
Ich möchte alle Zeilen löschen ab der Zeile in der die 100 auftritt.
Hier ein Beispiel (Spalte 1 = Tiefe, Spalte 2 ist eigentlich Spalte 8.):
11 89,00
12 99,00
...
63 83,00
64 129,00
65 126,00
66 76,00
67 37,00
...
129 15,00
130 16,00
NaN NaN
11 92,00
Also erscheint die 100 bei einer Tiefe von 64 m sollen auch alle Zeilen danach, Tiefe 64 - 130 m gelöscht werden. Bis zu der NaN-Zeile, denn dann beginnt ein neues Profil und das Spiel geht von vorn los.
Und ja, die Zeilen sollen dann vollständig gelöscht werden.
Hättest du da noch eine Idee?
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.04.2010, 22:40
Titel:
|
 |
Wie wäre es damit?
Muss nicht alle Sonderfälle (vor allem erster/letzter Messpunkt ist >100m) abdecken, mit Zufallszahlen funktioniert es aber. Das mit der Schleife und mit inf auffüllen ist ne ziemliche Krücke - das muss auch deutlich schöner gehen. Aber es funktioniert ;)
|
|
|
andi_0815 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 01.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.04.2010, 23:15
Titel:
|
 |
Cool,
er schmeißt bei mir zwar nur die Werte aus der Spalte 8 und macht nen inf draus, aber den Rest der Zeilen werd ich auch noch los. Er findet auf jedenfall schonmal die richtigen Sachen zum löschen.
Was bedeutet denn das "inf"?
Vielen herzlichen Dank!
Möge Matlab stets mit euch sein
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.04.2010, 23:18
Titel:
|
 |
inf steht für unendlich und dient da nur als eindeutiger Platzhalter, damit man die aussortierten Werte später wiedererkennt. Und da NaN schon als "Steuerzeichen" besetzt war, musste es eben inf sein.
Meine Testdaten haben so ausgesehen:
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 09.04.2010, 10:01
Titel:
|
 |
|
|
Zenon |

Forum-Guru
|
 |
Beiträge: 292
|
 |
|
 |
Anmeldedatum: 20.01.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2010, 10:30
Titel:
|
 |
Ich denke nicht das inf notwendig ist (ohne das irgendwie werten zu wollen, ich würde es einfach nciht machen), auch wenn mein Beispiel sich nur auf einen Abschnitt bis NaN bezieht...es sollte rel. leicht auszuweiten sein
Wie gesagt bezieht es sich im Augenblick nur auf einen Abschnitt...dort findet es die erste Reihe >= 100 und das erste NaN, darauf hin löscht es die dazwischen liegenden Zeilen...(wenn NaN auch weg soll muss man vor der Schleife
schreiben.
Will man alle Abschnitte auf einmal bearbeiten (wobei es so klang als ob immer nur ein Abschnitt zur gleichen Zeit angefasst würde), muss man die eins beim find weglassen. und dann nur das erste mal >= 100 nach einem NaN suchen (sollte mit den Stellenangaben in den Vektoren leicht sein).
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2010, 11:05
Titel:
|
 |
Zenon hat Folgendes geschrieben: |
Ich denke nicht das inf notwendig ist |
Nein, ist sicher nicht nötig - finde die Lösung ja selbst nicht sehr schön. ;)
Sowas hatte ich erst auch im Sinn, bis mir auffiel, dass es sein kann, dass in einem Abschnitt zwei Messungen >=100 sein können. Und dann stimmt die Zuordnung "erste Messung >= 100 liegt vor dem ersten NaN", "zweite Messung >=100 liegt vor dem zweiten NaN", ... nicht mehr. Oder hab ich deinen Code jetzt nicht verstanden?
|
|
|
Zenon |

Forum-Guru
|
 |
Beiträge: 292
|
 |
|
 |
Anmeldedatum: 20.01.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2010, 11:42
Titel:
|
 |
Durch find(...,1) wird nur der erste Fund berücksichtigt. deshalb kann man auch nur mit einem Abschnitt arbeiten. Ich hab mir auch schon einen Weg überlegt, dass ganze auf alle Abschnitte auszuweiten...aber da gibt es ein kleines Problem und ich frage mich woran das wohl liegt...
r enthält immer den gleichen Wert, so als ob find die Reiheneingrenzung die ich vornehme ignorieren würde...wenn ich mir die eingeschränkte Matrix ausgeben lasse, zeigt sie nur die gewünschten Zeilen...es scheint mit find zusammenzuhängen...
Mich würde wirklich sehr interessieren woran das liegt...
Zuletzt bearbeitet von Zenon am 09.04.2010, 11:46, insgesamt 2-mal bearbeitet
|
|
|
Epfi |

Forum-Meister
|
 |
Beiträge: 1.134
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2010, 11:45
Titel:
|
 |
Ah, alles klar - hatte ich überlesen.
Die Abschnittlänge ist ja bekannt (120 Zeilen). Da könnte man einfach eine Schleife durchlaufen, in der je durchlauf ein Abschnitt abgehandelt wird.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|