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

Werte filtern und neue Matrix schreiben

 

Stefanie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 13:40     Titel: Werte filtern und neue Matrix schreiben
  Antworten mit Zitat      
Hallo Zusammen, ich habe folgendes Problem und weiß mir nicht zu helfen.

Ich habe eine Matrix A [55x2]
In der ersten Spalte X-Werte und in der 2. Spalte die entsprechenden Y-Werte.
In einem 1. Schritt, will ich ausgehend vom ersten X-Wert alle weiteren Werte finden, deren zahlenmäßiger Abstand mind. 200 beträgt.

Und in einem 2. Schritt will ich die ganzen gesammelten X-Werte mit den Y-Werten zusammen in eine neue Matrix B schreiben.

Eigentlich trivial, aber ich komme hier nicht weiter. Kann mir jemand bitte helfen ? Ich brüte schon ne ganze Weile drüber!

Vielen Dank schon einmal im Vorraus!
Stefanie


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2010, 13:49     Titel:
  Antworten mit Zitat      
Hallo,

Stichwort: logical indexing.
Code:
B = A(abs(A(:,1)-A(1,1)) > 200, :);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefanie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 14:05     Titel:
  Antworten mit Zitat      
top, das ging ja schnell...

trifft es aber noch nicht ganz, wäre auch zu einfach gewesen Wink

Matlab soll von dem gefundenen Wert, dessen Wert größer als 200 ist, ausgehen und den nächsten suchen.
Also nicht vom ersten Wert alle die größer als 200 sind, sondern immer wenn Matlab einen Wert gefunden hat, den als neuen Wert nehmen und von dem ausgehend den nächsten suchen, der von diesem mind. 200 entfernt ist. Und dann im Anschluss alle Werte in eine Matrix schreiben.

Sorry für die konfuse Erklärung. Ist es klarer ?
 
Stefanie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 17:10     Titel:
  Antworten mit Zitat      
ich komme immer noch nicht weiter. Ich suche ein paar Befehle dafür, dass Matlab mir aus einer bestehenden Matrix fortlaufend immer den Wert in eine neue Matrix schreibt, der vom Vorgängerwert mind. um den Zahlenwert 200 entfernt ist.
Ich habe hierbei an eine FOR-Schleife gedacht, aber komme nicht weiter.

Grüße Stefanie
 
quant82
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 30.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2010, 17:25     Titel:
  Antworten mit Zitat      
naja ich bin selber noch matlab anfänger weswegen ich das vectorisieren auch net kann ^^

aber du könntest sowas machen

Code:


B = zeros(irgendwas,1);

for i =1:irgendwas

count = i*200

B(i) = A(abs(A(:,1)-A(1,1)) > count, :);

end

 


aber geht bestimmt auch einfacher
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2010, 19:27     Titel:
  Antworten mit Zitat      
Hallo,

@quant: dein Skript hat das Problem, dass immer auf den ersten Bezug genommen wird. Wenn ich es richtig verstanden habe, soll aber auf den vorherigen Bezug genommen werden, z.B.
0 10 500 550 750
--> Ergebnis soll 0 500 750 sein. Bei dir würde die 550 mitgenommen.

Zudem ist die Frage, was "irgendwas" ist.
Hier ein Alternativvorschlag:
Code:
A = [10:51:1000; 2*(10:51:1000)]';
B = A(1, :);
ctr = 1;
while 1
    ctr = find(abs(B(end,1)-A(ctr:end, 1)) > 200, 1, 'first') + ctr-1;
    if isempty(ctr)
        break
    end
    B(end+1, :) = A(ctr, :);
end


Unschön daran ist zugegebenermaßen, dass B dynamisch wächst. Leider weiß man aber halt nicht, wie groß es wird. Bei großen A sollte man sich da noch was einfallen lassen.

Grüße,
Harald

P.S. Ja, die originale Anfrage war missverständlich...
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefanie

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2010, 14:47     Titel:
  Antworten mit Zitat      
@ Harald: Vielen vielen Dank für die Hilfe, genau das habe ich gesucht. Mensch und ich saß über 4 Tage ran ohne gescheites Ergebnis. Merci !!!
 
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.