|
kraudi13 |

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 13:42
Titel: Zeilenweise summieren
|
 |
Hallo liebe Matlab-Gemeinde,
ich ich komme gerade bei einer vermeintlich leichten Aufgabe nicht mehr weiter.
Ich würde gern aus einer zweispaltigen Matrix Zeilenweise die zweite Spalte über einen definierten Bereich summieren, solang meine Bedingung für den Wert der Spalte 1 zutrifft. (1 bis 5 Zusammenfassen)
Am Ende bekomm ich aber leider immer wieder alle 7 Werte und nicht die ersten 5 raus und es wird (sicherlich durch die Summierung) pro Zeile auch die Anzahl der Zeile hinzuaddiert.
Ich freue mich über konstruktive Hinweise.
Beste Grüße
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 13:46
Titel:
|
 |
Hallo,
mir ist die Problemstellung nicht klar.
Ein Beispiel mit Input und erwartetem Output wäre hilfreich.
Vermutlich kann das Problem sehr kompakt mit logischer Indizierung gelöst werden.
Grüße,
Harald
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 17:01
Titel:
|
 |
Hallo Harald,
aus der Matrix soll am Ende ein Wert pro 5 Sekunden stehen:
A{
1 | 3
2 | 6
3 | 7
4 | 9
5 | 3
6 | 1
7 | 2
}
Am Ende sollte das folgende rauskommen:
B{
1 (1-5) | 5,6
2 (6-7) | 1,5
}
Vielen Dank schon mal dafür!
Beste Grüße
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 17:22
Titel:
|
 |
Hallo,
Falls immer 5 Werte zusammengehören und es vollständige Blöcke gibt, kann man auch reshape verwenden.
Grüße,
Harald
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 22:05
Titel:
|
 |
Hallo zurück,
ich hab das Beispiel leider versucht zu simpel zu halten, als es letztendlich im Endergrebnis ausschauen soll.
Dahinter steht eine Zusammenfassung von Sekunden-Werten aus einer Herzfrequenz-Analyse, die ich gern auf minütliche Werte heruntergebrochen haben möchte.
Rohwerte:
Sekunden, Herzfrequenz
01,76
02,75
03,75
04,75
05,76
06,77
07,80
08,81
09,82
10,82
11,82
12,81
13,79
14,79
15,79
Jetzt würde ich gern den Bereich, der zusammengefasst wird, variabel vorher definieren können (bspw.: 10s oder eben 60s). Am Ende sollte dann, wie beschrieben, der Mittelwert pro Bereich resultieren.
In meinem ersten Code lief das im Grunde auch so durch. Zumindest durchlief es den definierten Bereich (count zeigte die richtige Anzahl der Durchläufe)
summe_A beinhaltete allerdings weiterhin alle Werte des Originalvektors.
Beste Grüße
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 22:19
Titel:
|
 |
Hallo,
hast du denn meinen Vorschlag mal auf deinem Datensatz versucht?
Natürlich musst du die 5 durch 60 oder auch N ersetzen, und N auf 60 setzen.
Deinen Ansatz kann ich nicht nachvollziehen.
A wird in der Schleife nicht verändert, und dann wird sich natürlich auch sum(A,2) nicht ändern.
Grüße,
Harald
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 22:22
Titel:
|
 |
Ja hab ich. Und das funktioniert für einen vollständigen Datensatz auch gut. Allerdings misst das verwendete System mit einigen Sprüngen. Das Bedeutet, dass eine Minute manchmal 59, manchmal 49 Werte besitzt.
Beste Grüße
Tino
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 22:25
Titel:
|
 |
Hallo kraudi13,
Das liegt am "summe_A = sum(A,2)", denn hier wird ja immer wieder über ganz A summiert.
Vielleicht meinst Du:
Oder etwas in der Art.
Gruß, Jan
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 22:52
Titel:
|
 |
Da kommt am Ende leider nur 0 raus.
Es sollte so laufen, dass Zeile für Zeile gecheckt wird
1. Liegt der aktuelle Schleifendurchlauf innerhalb des definierten Zeitraumes
2. Wenn ja, summiere Zeile für Zeile
3. bis der definierte Zeitraum sein Ende erreicht.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 23:01
Titel:
|
 |
Hallo,
Zitat: |
Allerdings misst das verwendete System mit einigen Sprüngen. Das Bedeutet, dass eine Minute manchmal 59, manchmal 49 Werte besitzt. |
Der Ansatz sollte damit umgehen können. Was passiert denn, wenn du ihn auf solche Messwerte anwendest? Könntest du so einen Datensatz zur Verfügung stellen?
Grüße,
Harald
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 23:41
Titel:
|
 |
Ja, natürlich. Siehe Datei hr_data.txt
Da passiert leider wirklich das beschriebene Problem, dass am Ende mit summe_A nichts als 0 rauskommt.
Beste Grüße
Beschreibung: |
|
 Download |
Dateiname: |
hr_data.txt |
Dateigröße: |
5.01 KB |
Heruntergeladen: |
311 mal |
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.12.2016, 15:09
Titel:
|
 |
Hallo zusammen,
eine weitere Lösung wäre noch übe reshape. Aber dann müssten alle fehlenden Samples der Sekunden gefüllt werden und das bekomme ich gerade auch nicht wirklich hin.
Beste Grüße
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 17.12.2016, 16:40
Titel:
|
 |
|
 |
|
Hallo kraudi13,
Dann zeige doch wenigstens, was Du versucht hast und erkläre, wo es noch hängt.
Ich zumindest verstehe das Problem immer noch nicht. Die Erklärung
Zitat: |
Am Ende sollte das folgende rauskommen:
B{
1 (1-5) | 5,6
2 (6-7) | 1,5
} |
lässt mich z.B. mit fragendem Unverständnis zurück. Ich verstehe die Notation nicht. Ist das ein Text-File?
Zitat: |
Da kommt am Ende leider nur 0 raus.
Es sollte so laufen, dass Zeile für Zeile gecheckt wird
1. Liegt der aktuelle Schleifendurchlauf innerhalb des definierten Zeitraumes
2. Wenn ja, summiere Zeile für Zeile
3. bis der definierte Zeitraum sein Ende erreicht. |
Aber genau das macht der von mir gepostete Ansatz - zumindest dalls Du ihn so einsetzt wie von mir gedacht. Wie Du das nun tatsächlich implementiert hast, zeigst Du aber noch nicht. Darum kann ich keine Verbesserungsvorschläge geben.
Der
histcounts
Befehl kann Daten in "Bins" einsortieren und mit
accumarray
order dem modernen
splitapply
bekommst Du auch Summen über die Bins. Mir wird nur nicht klar, wie Du die Intervalle definierst, ansonsten wäre das Problem wohl mit 2 Zeilen erledigt.
Gruß, Jan
|
|
|
kraudi13 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 47
|
 |
|
 |
Anmeldedatum: 18.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.12.2016, 18:06
Titel:
|
 |
@Jan,
es klappt. Ich hatte in der Schleife in der dein vorgeschlagener Code lief einen kleinen Fehler drin und der hat am Ende die Summe 0 ergeben.
Jetzt passt es!
Besten Dank an euch für die Ausführungen!
Kraudi
|
|
|
|
|
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.
|
|