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

Die größten Stellen in einem Vektor finden!

 

sebastian1013

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2011, 11:59     Titel: Die größten Stellen in einem Vektor finden!
  Antworten mit Zitat      
Hallo Leute,
ich schreibe momentan an einem Programm und möchte z.b die Stellen der 4 größten Werte in einem Vektor herausfinden und in einem anderen Vektor speichern.
Die Anzahl der größten Werte ist variabel, sodass beim nächsten Programmstart es auch die Stellen 18 größten Werte sein können!

Ich danke euch schonmal für eure hilfreichen Antworten!

Beste Grüße

Sebastian


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 15.02.2011, 12:12     Titel:
  Antworten mit Zitat      
Ich würde es über Sortierung lösen:

Code:

a=rand(100,1);
a=sort(a,'descend');
n=4;
a(1:n)
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 15.02.2011, 12:16     Titel:
  Antworten mit Zitat      
Bei sehr grossen Datenmengen kann sortieren zuviel Zeit kosten. Wenn etwas über die Daten bekannt ist, kann man vorfiltern. In meinem obigen Beispiel kann man sagen "die grössten Werte sind bestimmt grösser als 0.6, also filtere ich nur die mit a>0.6 heraus.

Eine andere Vorgehensweise bei grossen Datenmengen und kleinen n wäre eine Schleife. Immer das absolute Maximum suchen und dann aus dem Suchvektor entfernen. Das n mal.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2011, 12:25     Titel:
  Antworten mit Zitat      
Vielen Dank schonmal für die Antwort!
Leider war etwas unglücklich von mir formuliert...
Ich habe einen Vektor "Vektor" mit verschiedenen Werten, jetzt möchte ich die Stellen der z.B. 4 größten Werte herausfinden und in einem neuen Vektor speichern, mit dem ich weiterarbeiten kann.
Allerdings soll die 4 keine fester Wert sein, sondern beim nächsten mal vielleicht 18 betragen oder 127 oder ...
Ich kann/darf den Vektor nicht umsortieren, weil ich die Stellen benötige, z.b. habe ich den Vektor "vec" und ich benötige die größten Stellen i_1 - i_4 des Vektors und diesen möchte ich in max_vec speichern wo nur die Stellen vorhanden sind, z.b max_vec=[1 5 8 27 ], mit i_1=1, i_2=5, i_3=8, i_4=28, welche den größten Stellen meines Ausgangsvektors entsprechen.
Ich benötige die Stellen, um die Zeilen in einer Matrix auf Null zu setzen.
ich hoffe jetzt ist es etwas verständlicher!
 
sebastian101

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2011, 12:49     Titel:
  Antworten mit Zitat      
Ich habe soeben eine Lösung herausgefunden:
Code:
%
max_i=[];
sens_left=3;
while length(max_i)<sens_left
    max_1=max(all_det);
for k=1:length(all_det)
    if max_1==all_det(k);
        max_i=[max_i,k];
        all_det(k)=0;
       
    end
end
end
max_i=sort(max_i)
 

vielleicht gibts ja etwas nicht so aufwendiges, aber meine Fragestellung ist damit eigentlich gelöst!
Vielen Dank trotzdem!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.02.2011, 17:45     Titel:
  Antworten mit Zitat      
Hallo Sebastian,

Andreas' Lösung mach fast genau das gewünschte. Das Sortieren ist dabei kein Problem, weil Du ja den Sortier-Index ebenfalls ausgebem kannst:
Code:
a = rand(100,1);
[as, index] = sort(a, 'descend');
s = 4;
as(1:n)
% Oder
a(index(1:n))

Also stecken die benötigten Indices direkt in der Variablen "index".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
sebastian101

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2011, 09:54     Titel:
  Antworten mit Zitat      
Hallo, viele Dank schonmal für eure Antworten,
aber mit welchem Befehl gibt er mir die Stellen aus, wo sich
die größten Werte befinden?

Viele Grüße
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 18.02.2011, 10:19     Titel:
  Antworten mit Zitat      
Hallo sebastian101,
Jan S hat Folgendes geschrieben:

Also stecken die benötigten Indices direkt in der Variablen "index".


Da hat dir Jan doch schon die Antwort auf deine Frage genannt. Guck dir mal Index an.
Code:


wenn du die Indices der größten vier Stellen willst dann so:
Code:

index(1:4) % bzw. index(1:n)
 


p.s.: Jan hat einen klitzekleinen Fehler in seinem Code. Es muss
Code:

heißen um es auf die nachfolgenden Befhele anzuwenden.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
sebastian101

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2011, 11:13     Titel:
  Antworten mit Zitat      
Ah, ok, also das Programm sortiert quasi, behält sich aber die ursprünglichen Positionen, sodass wenn man die vier größten Werte sucht, diese einfach die ersten vier sind!
Hat warscheinlich wegen dem s und n fehler nicht funktioniert!

Vielen Dank, ist alles geklärt Very Happy
 
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.