|
|
Splitten eines Arrays und anschließend separate Auswertung |
|
jazzman92 |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 25.09.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.09.2020, 16:02
Titel: Splitten eines Arrays und anschließend separate Auswertung
|
|
|
|
|
Moin zusammen,
ich habe ein bzw. zwei Probleme beim Verarbeiten von Daten. Es geht um die Auswertung von aufgenommenen Messdaten. Hierfür lese ich zunächst ein File mit drei Spalten und Zeilen (mehrere Millionen) ein. Beim Einlesen filter ich die Daten schon so, dass mir nur die reinen Messdaten angezeigt werden und alles an Zwischentext oder unwichtigen Informationen rausgefiltert wird. Das geschieht innerhalb von wenigen Sekunden. Die eingelesenen Messdaten sind immer durch eine Anzahl von Messpunkten (y) teilbar. Das heißt, es bleibt nie ein Rest über. Die Anzahl der Zeilen (n) ist für jeden Messpunkt (y) gleich.
Nun möchte ich jeden Messpunkt separat betrachten, auswerten und eine FFT ausführen.
Gelöst habe ich das zunächst mit einer for Schleife.
Das funktioniert soweit auch alles aber der Code schreibt mir ja im Endeffekt das Array, dass ja durch das eingelesene File schon vorhanden ist, nochmal neu. Das möchte ich nicht und das kostet zudem unnötig viel Zeit. Gibt es einen eleganteren und schnelleren Weg für diese Art der Operation? Ich habe mich schon an cell arrays probiert aber scheiter daran.
Die FFT ist im Übrigen kein Problem.
Mein zweites Problem ist, dass ich den Code so für einen Messpunkt ausführen kann. Ich möchten das Skript allerdings nutzen um alle vorhanden Messpunkte (y) innerhalb des Files auszuwerten und die erzeugten FFT Daten abspeichern. Meine Idee wäre es, noch eine for Schleife vorzuschalten, die pro Durchlauf die FFT für jeden Messpunkt neu durchführt. Wie stelle ich das am klügsten an?
Vielen Dank im Vorraus
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.09.2020, 16:35
Titel:
|
|
Hallo,
mit
kannst du jede Spalte der Daten in eine Matrix mit n Zeilen umwandeln. Operationen wie fft kannst du dann spaltenweise auf solche Matrizen anwenden.
Das müsstest du dann für die drei Spalten machen, z.B. in einer for-Schleife. Da du das ja nur drei Mal machen musst, wird das deutlich weniger Performance kosten als über Millionen Zeilen zu iterieren.
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 ;)
|
|
|
jazzman92 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 25.09.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.09.2020, 09:54
Titel:
|
|
Hallo Harald,
danke für die Antwort. Ich habe es tatsächlich geschafft meine Matrix mit reshape in gleichgroße Teile zu splitten. Die Dimension liegt bei 262144x4x27 (Anzahl der Zeilen pro MP, Anzahl der Spalten, Anzahl der Messpunkte). Mein Problem ist aber, dass Spalte 2-4 jeweils eine Kopie von der ersten Spalte ist. Die Werte sollten allerdings jeweils unterschiedlich sein.
Mein Ansatz war:
Bekommt man das Problem irgendwie behoben?
Beste Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.09.2020, 16:26
Titel:
|
|
Hallo,
reshape erstellt keine Kopien von Werten, sondern ändert lediglich die Dimensionen eines Arrays und lässt den Rest unverändert. Meine Vermutung ist, dass die doppelten Werte schon im Original vorhanden waren.
Für weitere Unterstützung bräuchte ich leider ein reproduzierbares Beispiel.
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 ;)
|
|
|
jazzman92 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 25.09.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.09.2020, 09:03
Titel:
|
|
Hallo,
ich habe mich noch ein wenig an der reshape Funktion probiert und zumindest den Fehler gefunden, allerdings noch nicht die Lösung.
Ich habe eine Matrix mit 4 Spalten und jeweils 7077888 Zeilen. Diese möchte ich ja gerne in jeweils 27 Subarrays unterteilen.
Wenn ich die Matrix aufteile und jede Spalte mit ihren 7077888 separat betrachte, funktioniert die reshape Funktion ohne Probleme.
Ich habe allerdings herausgefunden, dass wenn ich die reshape Funktion auf die Matrix mit 4 Spalten und 7077888 Zeilen anwenden, jeweils alle Einträge des Subarrays nacheinander mit allen Werten aus der ersten Spalte gefüllt werden. Deshalb habe ich die ersten paar Subarrays nur Werte aus der ersten Spalte. Wenn die erste Spalte durch ist, werden die Subarrays mit Werten der zweiten Spalte gefüllt usw.
Demnach muss ich doch irgendwas an der Eingabe der reshape funktion ändern, oder?
Beste Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.09.2020, 09:22
Titel:
|
|
Hallo,
wenn ich das richtig verstehe, die Matrix transponieren, bevor du sie an reshape übergibst, etwa so:
Ansonsten bitte ein kleines Beispiel basteln, anhanddessen ich das Problem nachvollziehen kann.
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 ;)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|