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

Vektor bereichsweise untersuchen

 

jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 13:58     Titel: Vektor bereichsweise untersuchen
  Antworten mit Zitat      
Hallo liebe Forum-Mitglieder.

Ich habe ein Problem und hoffe ihr könnt mir helfen.

Ich habe einen Zahlenvektor x mit 100000 Werten. Ich möchte jetzt folgendes machen:

ich nehme mir die ersten 10 Werte und suche nach max und min und speichere mir den index in einem vektor ab. dann nehme ich mir die nächsten 10 usw. bis ich den Vektor durch bin.

Leider habe ich nicht soviel Ahnung von Matlab und hoffe ihr könnt mir weiterhelfen.

Vielen Dank schonmal.

Viele Grüße
Jenny


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 14:09     Titel:
  Antworten mit Zitat      
Das wäre eine Möglichkeit:

Code:

 x=rand(100,1); % Testvektor mit 100 Werten
 m=1;
 for i=1:10:length(x)
     [wert(m),index(m)]=max(x(i:i+9)); % Maximum der 10 Werte bestimmen
     index(m) = index(m) + i - 1; % Offset hinzufügen
     m = m + 1;
 end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
zuBesuch

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:11     Titel:
  Antworten mit Zitat      
So könnte man es auch machen:


Code:

a=rand(100000,1); %Beispiel Vektor
b=reshape(a,[],10);
[~,index_max]=max(b,[],2);
[~,index_min]=min(b,[],2);

 
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:14     Titel:
  Antworten mit Zitat      
was ist genau ein Offset?

und was wäre denn, wenn ich einen Vektor mit 106 werten hätte? dann geht das ja nicht direkt auf mit den 10 werten.

Kannst du mir dazu noch was sagen?
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:19     Titel:
  Antworten mit Zitat      
Danke Gast

zuBesuch hat Folgendes geschrieben:
So könnte man es auch machen:


Code:

a=rand(100000,1); %Beispiel Vektor
b=reshape(a,[],10);
[~,index_max]=max(b,[],2);
[~,index_min]=min(b,[],2);

 


Das funktioniert nicht. Habe es versucht. Bekomme aber in z.b. index_max Zahlen die sich wiederholen. Das kann ja nicht sein.
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 14:24     Titel:
  Antworten mit Zitat      
1. Den Offset benötigst du, da der index von max immer nur zwischen 1 und 10 liegt. Wenn du nun aber den Bereich 21...30 untersuchst, willst da wissen an welche Stelle das Maximum in x liegt. Daher muss ich für diesen Abschnitt nun zu dem ermittelten max index zwischen 1 und 10 das i = 21 - 1 dazuzählen.

2. Das ist richtig...dann würde es hier am Ende eine Fehlermeldung geben, da ich auf den Bereich 101...110 zugreifen will, aber bei 106 Schluss ist. Hast du eine Idee, wie man das lösen kann? Tipp...die Länge des Vektors x vorher auf einen Rest bei Division durch 10 prüfen.

Code:
mod(length(x),10)
% liefert dir den Rest wenn es nicht aufgeht, ansonsten Null
 


Zuletzt bearbeitet von DSP am 16.08.2011, 14:32, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:28     Titel:
  Antworten mit Zitat      
Vielen Dank erstmal.

Du bist echt super.

Aber kannst du mir noch sagen, was ich machen kann, wenn es nicht aufgeht? Also wie ich die letzten Zahlen < 10 vergleichen kann?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 14:30     Titel:
  Antworten mit Zitat      
Ich habe dir ja schon einen Tipp gegeben...mach doch mal selbst einen Versuch/Vorschlag. Dann helfe ich dir gern weiter.

Edit: der Befehlt mod liefert dir sogar den Rest...damit hast du alles was du brauchst um das Problem zu lösen.
Private Nachricht senden Benutzer-Profile anzeigen
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:33     Titel:
  Antworten mit Zitat      
Okay.

Angenommen ich habe die Länge 106

Also ich würde das mit mod(length(x),10) untersuchen und dann erstmal

Code:
for i=1:10:length(x)-mod(length(x),10)
     [wert(m),index(m)]=max(x(i:i+9)); % Maximum der 10 Werte bestimmen
     index(m) = index(m) + i - 1; % Offset hinzufügen
     m = m + 1;
 end


und dann würde ich die letzten 6 Elemente des Vektors seperat untesuchen.

Was meinst du?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 14:34     Titel:
  Antworten mit Zitat      
Bingo Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:40     Titel:
  Antworten mit Zitat      
Ich hab doch noch ne Frage. Habe das gerade ausprobiert und irgendwie passt das nicht.

Also index gibt mir doch die Position des max in meinem vektor x an, oder?
was ist das dann mit dem index_max?

Also irgendwas verstehe ich hier falsch
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 14:43     Titel:
  Antworten mit Zitat      
Was passt nicht?

index_max ist doch von dem anderen code. Hier wird x eben in b zu 10er Päckchen aufgeteilt und du erhältst somit wieder nur einen index_max zwischen 1 und 10. Hier müsste man dann ebenfalls den Offset dazuzählen, wenn man den index des Maximums in x wissen möchte.
Private Nachricht senden Benutzer-Profile anzeigen
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 14:45     Titel:
  Antworten mit Zitat      
Tut mir leid. Habe mich vertan. Passt alles.

Vielen Dank nochmal.

Warst mir echt eine große Hilfe.

Viele Grüße
jenny
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 15:07     Titel:
  Antworten mit Zitat      
wäre zu schön um war zu sein, hätte es sofort funktioniert.

Also mit max klappt es wunderbar.

Mache ich aber das gleiche mit min, also:

Code:
for i=1:10:(length(x)-mod(length(x),10))
     [wert(m),index(m)]= min(x(i:i+9)); % Maximum der 10 Werte bestimmen
     index(m) = index(m) + i - 1; % Offset hinzufügen
     m = m + 1;
  end


dann bekomme ich einen Vektor, der doppelt so lang ist wie der Max Vektor und die ersten Werte sind alle 0.
Versteh ich nicht. Kannst du mir dazu was sagen?
 
jenny2103

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 15:12     Titel:
  Antworten mit Zitat      
Problem gefunden.

Habe vergessen den Index m wieder auf 1 zu setzten

Danke nochmal.

Klappt alles super.

Gruß
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.