|
|
Werte in 225er Schrittweite ablaufen |
|
Geranie |

Forum-Anfänger
|
 |
Beiträge: 44
|
 |
|
 |
Anmeldedatum: 27.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 03.07.2013, 12:48
Titel: Werte in 225er Schrittweite ablaufen
|
 |
Hallo zusammen,
ich hab einen Datensatz, in welchem ich jeweils 225 Werte daraufhin abgleichen will, ob diese alle positiv oder alle negativ sind (was relativ häufig nicht der Fall sein wird, meistens werden die Werte gemischt auftreten). Ingesamt hat mein Datensatz fast 8 Millionen Werte.
Jetzt hake ich gerade schon an der berühmten For-Schleife, von der ich mal vermute, dass ich sie nutzen kann, damit immer die weiteren 225 Werte abgesucht werden? Wie mach ich Matlab das genau klar? Also, dass er nach der ersten Schleife bei Wert 226 weitermacht (und dann wieder für 225 Werte schaut, ob diese alle positive oder negativ sind).
Das Heraussuchen der Werte läuft wahrscheinlich einfach über:
oder so ähnlich?
Wäre über jede Hilfestellung dankbar!
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.07.2013, 13:22
Titel:
|
 |
Hallo,
wenn die Länge der Daten ein vielfaches von 225 ist, geht das recht einfach, kompakt und schnell:
Wenn die Länge der Daten kein vielfaches von 225 ist, musst du dir sowieso überlegen, wie du den letzten Block behandelst.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 03.07.2013, 14:35
Titel:
|
 |
Hallo,
Oder:
Ich meine, die letzte Zeile von Haralds Vorschlag funktioniert nicht:
BSXFUN wäre hier besser:
Aber dies würde es auch schon tun, wenn die beiden anderen Werte bereits berechnet sind:
Die Kernaussage ist aber: Das geht gut mit FOR-Schleifen, aber einfache und schneller mit Matlab's vektorisierten Methoden.
Gruß, Jan
|
|
|
Geranie |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 44
|
 |
|
 |
Anmeldedatum: 27.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 03.07.2013, 14:43
Titel:
|
 |
Hallo Harald!
Ja, der Datensatz ist ein Vielfaches von 225.
Dein Code läuft auch einwandfrei durch, nur stimmen die Zeitwerte irgendwie nicht überein.
Also, ich übergebe "allsamesign" dann an die Datumswerte (die zu diesen Werten, die ich auf positiv und negativ überprüfe gehören) und theoretisch müsste mir Matlab dann eigentlich 225 Zeitwerte ausgeben, die immer eine Viertelstunde ergeben. Hier bekomme ich aber unzusammenhängende Zeitwerte raus, also als Beispiel:
ich würde erwarten:
01.01.2013 00:00:00
alle Werte bis
01.01.2013 00:14:56
bekomme aber:
01.01.2013 01:55:00
und danach
01.01.2013 02:55:44
Mache ich da irgendeinen Fehler? Folgendermaßen habe ich allsamesign übergeben:
Vielen Dank schonmal an dich!!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.07.2013, 15:04
Titel:
|
 |
Hallo,
Die Einträge in allsamesign beziehen sich auf den jeweiligen Block. Das siehst du auch, wenn du dir die Länge der Variable im Workspace ansiehst.
Das bedeutet, du musst dir auch aus dem Zeitvektor die entsprechenden Anfangs und Endzeiten ziehen:
Wenn du in diese Vektoren indizierst, solltest du die richtigen Anfangs- und Endzeiten der jeweiligen Blöcke bekommen.
Grüße,
Harald
|
|
|
Geranie |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 44
|
 |
|
 |
Anmeldedatum: 27.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 03.07.2013, 15:36
Titel:
|
 |
Oh mann, sowas hatte ich schon vermutet, aber irgendwie nicht geklärt bekommen!
Ich danke dir, jetzt läuft es mit der Indizierung und ich bekomme die gewünschten Daten ausgegeben. Herzlichen Dank!!!
|
|
|
Geranie |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 44
|
 |
|
 |
Anmeldedatum: 27.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 09.07.2013, 12:23
Titel:
|
 |
|
 |
|
Hallo zusammen!
Beim weiterrechnen ist mir aufgefallen, dass die allsamesign-Werte nicht stimmen. (Hier übrigens auch ein Danke an Harald für die Antwort im anderen Thread. Ich hatte direkt wieder for-schleifen im Kopf, dabei funktionierte auch dafür alles wunderbar mit reshape!)
Also, folgendes Problem: Für diese Funktion
bekomme ich eine 1x35136 Matrize, die für wahre Werte 0 und für falsche Werte 1 enthält. Nun habe ich aber bspw in allnegative eine 1 in der 4. Spalte stehen und in allsamesign eine 0. Ich habe die Werte überprüft und tatsächlich sind die 225Werte in Spalte 4 alle negativ.
Ich habe dann die anderen Codes von Jan ausprobiert.
Für
bekomme ich eine 225x35136 Matrize, in er für jeden Wert eine 0 oder 1 steht. Aber auch hier wird für die 4.Spalte ab einem bestimmten Wert eine 0 angezeigt, obwohl diese eben alle negativ sind (wie gesucht).
Für
bekomme ich den Fehler: Operands to the || and && operators must be convertible to logical scalar values.
Hat irgendwer eine Idee, was genau bei allsamesign falsch läuft? Allnegative und allpositive scheinen (zumindest für die Werte, die ich kontrolliert habe) zu stimmen.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 09.07.2013, 13:28
Titel:
|
 |
Hallo Geranie,
Zitat: |
Nun habe ich aber bspw in allnegative eine 1 in der 4. Spalte stehen und in allsamesign eine 0. |
Das ist kein Widerspruch: "all amse sign" heißt ja nicht, dass die die 4. Spalte positive oder negativ ist, sondern dass alle Elemente der entsprechenden Zeile alle das gleiche Vorzeichen haben.
In meinem Code möchtest Du vielleicht noch ein all() ergänzen:
Später hatte ich dann einen Tipp-Fehler: Für Arrays muss es | heißen, während || für Skalare reserviert ist.
Gruß, Jan
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.07.2013, 20:23
Titel:
|
 |
Hallo,
es hatte sich ein Tippfehler eingeschlichen. Ich meinte:
Alternativ eben
Grüße,
Harald
|
|
|
Geranie |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 44
|
 |
|
 |
Anmeldedatum: 27.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 11.07.2013, 17:22
Titel:
|
 |
Vielen Dank euch beiden, ich habe es nun mit der 'und'-Verknüpfung gelöst und wieder etwas gelernt.
Danke!
|
|
|
|
|
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.
|
|