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

Matrix mit genau xx Elementen erstellen (einheitl. Plot)

 

Leja1902
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 11:24     Titel: Matrix mit genau xx Elementen erstellen (einheitl. Plot)
  Antworten mit Zitat      
Hallo,

ich möchte aus versch. Messgraphen mit ähnlicher, aber nie gleicher Länge einen "Durchschnittsgraph" für spätere Berechnungen erstellen. Dafür wollte ich zuerst alle Graphen in einem Diagramm mit der gleichen Länge darstellen. Da ich gehört habe, dass das "Strecken" kürzerer Graphen schwierig ist, würde ich einfach einen Teil der längeren Graphen abschneiden, sodass alle auf die gleiche Länge kommen.

Kann Matlab selbstständig die längste Matrix (Länge x) ermitteln und dann aus den anderen Matritzen neue Matritzen mit genau der Länge x erzeugen? Ich habe in der Dokumentation keinen Beitrag gefunden, der aus einer vorhandenen Matrix Matritzen mit genau x Elementen erzeugt.

Liebe Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 11:30     Titel:
  Antworten mit Zitat      
Hallo,

in welcher Form liegen diese Messgraphen vor?
Idealerweise sollten die verschiedenen Messungen als Cell Array abspeichert sein. Dann kann mit cellfun eine Operation (length / size, aber auch ein Kürzen über z.B. @(x) x(1:n) ) auf alle Messungen angewendet werden.
Wichtig wäre zudem noch, wie dieses Erzeugen der Länge L erfolgen soll. Soll am Anfang was abgeschnitten werden, oder am Ende, oder soll "irgendwie" (wie??) interpoliert werden?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 11:35     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank für die schnelle Reaktion!

Die Daten liegen als Cell-Array vor. (xx mal 1 Double)

Das einfachste wäre wohl, wenn man am Ende etwas abschneidet, oder? Am liebsten würde ich jedoch interpolieren, damit die Ergebnisse nicht verfälscht werden.. wie genau muss ich mir noch überlegen. Fürs erste würde es aber reichen, das Ende abzuschneiden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 12:12     Titel:
  Antworten mit Zitat      
Hallo,

sind in den Cells Vektoren oder Matrizen?
Jedenfalls für Vektoren so:
Code:
minLength = min(cellfun(@length, data));
dataModified = cellfun(@(x) x(1:minLength), data, 'UniformOutput', false);


Für Matrizen eher so (Annahme: die Zeilenanzahl soll angepasst werden):
Code:
minLength = min(cellfun(@(x) size(x,1), data));
dataModified = cellfun(@(x) x(1:minLength,:), data, 'UniformOutput', false);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 12:52     Titel:
  Antworten mit Zitat      
Alles klar, vielen Dank! Wie gebe ich die Daten denn genau an?

Die Variablen W2 bis W7 habe ich mit num2cell konvertiert.

Code:
minLength = min(cellfun(@(x) size(x,1), w2,w3,w4,w5,w6,w7));
dataModified = cellfun(@(x) x(1:minLength,:),w2,w3,w4,w5,w6,w7, 'UniformOutput', false);


So wird das wahrscheinlich nicht richtig angegeben, oder? Mit eckigen Klammern funktioniert es ebenfalls nicht. Oder habe ich da einen Denkfehler?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn es ein Cell Array ist, dann einfach nur w. Das ist ja gerade der Punkt an cellfun, dass das dann auf jeden Zellinhalt angewendet wird.
Code:
minLength = min(cellfun(@(x) size(x,1), w));
dataModified = cellfun(@(x) x(1:minLength,:),w, 'UniformOutput', false);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 14:02     Titel:
  Antworten mit Zitat      
Das dachte ich auch, aber dann teilt Matlab mir nur mit, dass w als undefinierte Variable gilt.

"Undefined function or variable 'w'.

Error in tryW (line 33)
minLength = min(cellfun(@(x) size(x,1), w));"
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 14:10     Titel:
  Antworten mit Zitat      
Hallo,

dann ist w kein Cell Array, sondern du hast wohl durchnumerierte Variablen w2 bis w7. Das ist generell nicht empfehlenswert, stattdessen eben ein Cell Array, das w2 bis w7 beinhaltet.
Du hattest aber doch bestätigt, dass du ein Cell Array hast??

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 14:39     Titel:
  Antworten mit Zitat      
Hab den Fehler gefunden, ich Schussel..

Beim Plotten will Matlab mir allerdings nicht helfen. Ich müsste das doch mit
Code:
plot([dataModified{:}])
einfach plotten können, oder nicht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 14:48     Titel:
  Antworten mit Zitat      
Hallo,

das würde die Inhalte der Cells nebeneinander hängen und plot würde spaltenweise plotten.
Was passiert denn, wenn du es so versuchst?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 14:51     Titel:
  Antworten mit Zitat      
Er sagt dann "Invalid data argument.". Gibt es eine Funktion mit der man den Cellarray einfach plotten kann oder muss ich die einzelnen array werte erst wieder als einzelne Variablen speichern und diese dann alle in einem plot nacheinander darstellen?

Liebe Grüße!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 14:58     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht liegen da irgendwie Cells in Cells? Ist immer schwierig zu sagen, wenn man das nicht vor sich hat.

Teile das doch mal in zwei Befehle auf
Code:
M = [dataModified{:}];
plot(M)

und schau dir an, was der Datentyp von M ist.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 15:26     Titel:
  Antworten mit Zitat      
Leider funktioniert das auch nicht. Die Variablen sehen wie folgt aus (siehe Bild)

Capture2.PNG
 Beschreibung:

Download
 Dateiname:  Capture2.PNG
 Dateigröße:  28.71 KB
 Heruntergeladen:  183 mal
Capture.PNG
 Beschreibung:

Download
 Dateiname:  Capture.PNG
 Dateigröße:  15.22 KB
 Heruntergeladen:  195 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2020, 15:33     Titel:
  Antworten mit Zitat      
Hallo Harald!!

Ich konnte es lösen, bin grade super happy. Man muss vorher vom M Vektor wieder die Struktur ändern (cell2mat), dann wird es darstellbar.

Vielen Dank für deine Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 15:35     Titel:
  Antworten mit Zitat      
Hallo,

also wie gesagt anscheinend Cells in Cells. Warum eigentlich? Die innere Cell-Ebene sollte doch überflüssig sein. Versuch mal
Code:
w = cellfun(@cell2mat, w, 'UniformOutput', false)


Hilfreicher als ein Screenshot wären noch die tatsächlichen Daten bzw. ein Ausschnitt davon als .mat - File (im Zweifelsfall zippen). Dann kann man den Vorschlag auch direkt selber ausprobieren und das erspart vielleicht einiges an Hin und Her.

edit: um so besser :)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.