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

Matritzen abschneiden

 

andi_1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 14:50     Titel: Matritzen abschneiden
  Antworten mit Zitat      
Hallo Leute,

habe eine Matrix mit 3 Spalten und 100 zeilen. In den ersten beiden Spalten stehen x- und y-Koordinaten in der dritten Spalte eine Höhe.

Die Matrix ist nach der Höhe sortiert.

Nun möchte ich alle Zeilen der Matrix löschen, deren Höhe kleiner ist, als die kleinste Höhe + 0,5 Meter.

kann mir da jemand schnell und unbürokratisch helfen? Smile
Gruß und Dank
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 14:54     Titel:
  Antworten mit Zitat      
Hi

du musst dir zuerst den Minimalen Wert suchen
würde mir eine Hilfsvariable definieren dafür

sollte über x=find(Matrix,Min);

x2=x+0,5;
Zum Schluss wieder mit find(Matrix<x2);
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.09.2010, 14:54     Titel: Re: Matritzen abschneiden
  Antworten mit Zitat      
Hallo Andi,

was hast du denn bisher versucht?
Kennst Du den Befehl MIN?
Kannst Du Spalten aus einer Matrix löschen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 08.09.2010, 15:01     Titel:
  Antworten mit Zitat      
Hi,

hier eine Idee:
Code:


A= rand(10,3)*10; % Beispielsmatrix

index = find(A(:,3)<min(A(:,3)+0.5));

A(index,:)=[];

 



Du brauchst also in den Code statt A nur den Namen deiner Matrix einsetzten
Gruß,
lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 15:15     Titel:
  Antworten mit Zitat      
Hallo Leute,

inspiriert durch eure Vorschläge hab ichs hinbekommen:
Code:

l=0.5        %alles hierunter wird abgeschnitten
M = sortrows(X, 3) ;%matrix nach z sortieren
M5 = M(1,3)         %drittes element wählen = min
M6 = M5 + l         % min + schwelle
M7 = find(M(:,3)< M6)
[m7,n7] = size (M7)
NM = M;
NM(1:m7, :) = [];     %unten abschneiden (unter schwelle)
 


Gruß und Dank
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: 08.09.2010, 15:51     Titel:
  Antworten mit Zitat      
Hallo lilov,

oder nochmal ein wenig einfacher ohne FIND ("logical indexing"):
Code:
A= rand(10,3)*10; % Beispielsmatrix
A(A(:,3) < min(A(:,3)+0.5), :) = [];


Je nach Matlab-Version und Drumherum kann auch dies schneller sein:
Code:
A = A(A(:,3) >= min(A(:,3)+0.5), :);


Die Anzahl der Bugs, die man in dieser einzelnen Zeile machen kann, ist viel kleiner als in den 7 Zeilen in Andi's Lösung. Zudem läuft es deutlich schneller.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 08.09.2010, 15:57     Titel:
  Antworten mit Zitat      
Hi Jan,

Danke:) Hab am Anfang an sowas ähnliches gedacht aber irgendwie hatte es nicht funktioniert:)

Gruß,

lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 16:12     Titel:
  Antworten mit Zitat      
Hallo jan und lilov,

wie würde der Code aussehen, wenn ich alles unter min+0,5 und alles über min+1 abschneiden wollte?
Gruß
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: 09.09.2010, 15:03     Titel:
  Antworten mit Zitat      
Hallo Andi,

??? Wir haben Dir die Lösung für "alles unter min+0.5" bereits gegeben. Für "alles über min+1" solltest Du das sehr leicht transferieren können.

Für "und" kannst Du einfach beides nacheinander ausführen oder in Matlab nach einem Kommando suchen, dass so etwas wie "und" ausführt. Und natürlich English ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 09.09.2010, 15:06     Titel:
  Antworten mit Zitat      
.... erstmal müsstest du aber das Minimum als Variable speichern. da wenn man das ganze nacheinander ausführt ist das Minimum ja nicht dasselbe
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.