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

Vektoren unterschiedlicher Länge auf gleiche Länge bringen

 

fmf4
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 18:48     Titel: Vektoren unterschiedlicher Länge auf gleiche Länge bringen
  Antworten mit Zitat      
Hallo liebe Matlab-Experten Smile,

ich habe 500 Vektoren unterschiedlicher Länge, die in insgesamt 500-mat-Dateien gespeichert sind. Die Vektoren besitzen eine Länge zwischen 102 und 266 Elementen. Ziel ist es diese 500 Vektoren in eine Matrix zu schreiben und dann eine Clusteranalyse durchzuführen. Dazu müssen natürlich alle Vektoren die gleiche Länge haben. Wie kann ich diese Vektoren auf eine gemeinsame Länge bringen? Es ist leider nicht möglich einfach die ersten 102 Werte zu nehmen oder die bis 266 fehlenden Elemente mit Nullen aufzufüllen. Für die Clusteranalyse ist der Verlauf der Signale entscheidend. Deswegen muss ich die Signale strecken oder stauchen ohne den charakteristischen Verlauf zu verfälschen.
Hat jemand eine Idee, wie sowas gehen kann?
Über Hilfe jeglicher Art würde ich mich sehr freuen.
Vielen Dank.
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 30.05.2011, 21:01     Titel:
  Antworten mit Zitat      
Viele Möglichkeiten:

- In einer Cell speichern, dann können die Vektoren auch unterschiedliche Längen haben
- Mit NaNs auffüllen, mit Nullen auffüllen
- Auf die gleiche Skala (je nach dem was du hast) skalieren, z.B. mit interp1()
Private Nachricht senden Benutzer-Profile anzeigen
 
fmf4
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 11:27     Titel:
  Antworten mit Zitat      
Danke für deine Antwort. Das Problem ist nur, dass ich ja im Anschluss daran eine Clusteranalyse durchführen möchte. Dazu möchte ich den 'kmeans'-Algorithmus verwenden. Und für den benötigt man eine Matrix, d.h. das mit der Cell funktioniert schon mal nicht. Mit NaN auffüllen funktioniert aus dem selben Grund auch nicht. Die Nullen verfälschen ja den Verlauf meines Signals, dann würde der Algorithmus zwei ähnliche Funktionen nicht einem Cluster zuordnen. Im folgenden mal ein kurzen einfaches Beispiel, wie meine 2 unterschiedlich langen Vektoren aussehen könnten:

Code:
%Beispielvektoren
a=[1 5 6 5 3 1 4 5 4 2];
b=[1 6 1 4 2];
 


Diese Vektoren haben an sich den gleichen Verlauf, nur ist b etwas "gestaucht". Ich will nun beide Vektoren auf eine Länge bringen, ohne den Verlauf zu verfälschen. Geht das mit interp1()? Kannst du mir mal bitte auf die Sprünge helfen, wie ich das schreiben müsste?

Liebe Grüße
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: 31.05.2011, 14:14     Titel:
  Antworten mit Zitat      
Hallo fmf4,

Code:
a=[1 5 6 5 3 1 4 5 4 2];
b=[1 6 1 4 2];
b2 = interp1(1:length(b), b, linspace(1, length(b), length(a)));
>> [1.0, 3.22, 5.44, 4.33, 2.11, 1.67, 3.0, 3.78, 2.89, 2]
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fmf4
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 14:43     Titel:
  Antworten mit Zitat      
Uuuhhh... das sieht vielversprechend aus. Danke, werde sofort versuchen das auf meinen Fall anzuwenden.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtom1986
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.05.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2021, 16:03     Titel:
  Antworten mit Zitat      
Code:
a=[1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4]'
a=a(~(a>2))
b=[1,2,3,4,5,6,7,8,9,7,9,8,4,5,6,47,6,4,98,5,4,56,6,74,6,4,6,8,4,654]'


Möchte auf den Vektor b auf die Länge von Vektor a kürzen.

Zur Erklärung:
Vektor a ist die Dehnung
Vektor b ist die Spannung

Soll ein Spannungs Dehnungsdiagramm plotten das bis zu Dehnungen bis 2 geht.
Also Vektor a ist schon auf die richtige länge gekürzt aber Vektor b muss noch gekürzt werden. Am besten abhängig von Vektor a also nicht auf 10 Stellen sonder auf:
Code:
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 - 2024 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.