|
|
Array vergleichen - Index der gemeinsamen Datensätze ausles |
|
mareinki |
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 29.10.22
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.10.2022, 16:18
Titel: Array vergleichen - Index der gemeinsamen Datensätze ausles
|
|
|
|
|
Hallo!
Ich habe einerseits einen Datensatz A mit halbstündlichen Messergebnissen (zB Temperatur zu Zeitpunkten 25.10.2017 00:00:00, 25.10.2017 00:30:00 ........... bis 1.1.2018 23:30:00)
Jetzt will ich für die Messpunkte an öst. Feiertagen (zB 26.10.2017 00:30:00 ... bis 26.10.2017 23:30:00, bzw. 01.11.2017 00:30:00 bis 23:30:00, etc.) die Indices im Datensatz A berechnen (und dann diese Messpunkte ausschliessen oder nur mit diesen MP weitere Berechnungen anstellen). In diesem Beispiel wären das für den Feiertag 26.10.2017 die Indices 49 bis 97).
Die öst. Feiertage habe ich manuell eingegeben und diese Datensätze (B) in ein matlab-time Format gebracht. D.h. der Datensatz B bringt mit datestr(B) die werte
'25-Okt-2022 00:00:00' '25-Okt-2022 00:30:00' usw
Normalerweise kann man ja mit find wie folgt vorgehen: find(weekday(A) ==1) und bekommt damit die Indices.
Aber so was wie find (B == A) funktioniert nicht.
Ich habe schon mit ismember, setdiff, intersect probiert, aber ich komme nicht drauf wie das geht (evtl auch diese Befehle nicht richtig eingesetzt).
Natürlich muss ich Datensatz A auch nach anderen Kriterien (zB Monate) filtern und dann nur diese Indices verwenden zB find(month(A) == 3)). Aber das funktioniert einwandfrei.
Ziel ist die Indices von zB Datensätzen aus dem Monat Oktober ohne Sonntage und ohne öst. Feiertage zu erhalten.
mfg
Mareinki
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.10.2022, 21:35
Titel:
|
|
Hallo,
Zitat: |
Aber so was wie find (B == A) funktioniert nicht. |
Bedeutet was? Bekommst du eine Fehlermeldung oder ein unerwartetes Verhalten?
Zitat: |
matlab-time Format |
Was soll das sein? datetime?
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 ;)
|
|
|
mareinki |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 29.10.22
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.10.2022, 11:13
Titel:
|
|
|
|
|
Hi
Danke für deine Fragen.
Also mit matlab-time Format meinte ich das Format mit dem Matlab normalerweise Datum/Zeit verarbeitet.
A(1:3) ergibt so als Ausgabe
A =
1.0e+05 *
7.3694
7.3694
7.3694
datestr(A(1:3) ergibt
ans =
3×20 char array
'30-Aug-2017 00:00:00'
'30-Aug-2017 00:30:00'
'30-Aug-2017 01:00:00'
B(1:3) ergibt
1×3 datetime array
26-Oct-2017 00:00:00 26-Oct-2017 00:30:00 26-Oct-2017 01:00:00
datestr(B(1:3) ergibt
ns =
3×20 char array
'26-Oct-2017 00:00:00'
'26-Oct-2017 00:30:00'
'26-Oct-2017 01:00:00'
Und jetzt ist mir gerade aufgefallen, dass zwischen dem Format von A und B doch ein Unterschied ist, obwohl beide nach dem datestr-Kommando dasselbe Ergebnis liefern.
Ich meinte dass dass vorliegende Format von A dem datetime format entspricht, ist aber nicht so
>> whos A
Name Size Bytes Class Attributes
time 86064x1 688512 double
>> whos B
Name Size Bytes Class Attributes
B 1x2784 22272 datetime
D.h. ich müsste A und B auf das gleiche Format bringen und dann sollte der find Befehl funktionieren?
Wenn ich aber zB C=datetime(A) eingebe dann bekomme ich folgende Fehlermeldung
Error using datetime
Numeric input data must be a matrix with three or six columns, or else three, six, or seven separate numeric arrays. You can also create datetimes from a single numeric array using the 'ConvertFrom' parameter.
mfg
Mareinki
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.10.2022, 13:23
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Also mit matlab-time Format meinte ich das Format mit dem Matlab normalerweise Datum/Zeit verarbeitet. |
Das würde ich seit R2014b anders sehen. datetime ist seitdem die beste Art, Zeitstempel zu repräsentieren, da hier alle Möglichkeiten der von datenum, datestr und datevec gelieferten Darstellungen vereint werden.
Zitat: |
Wenn ich aber zB C=datetime(A) eingebe dann bekomme ich folgende Fehlermeldung
Error using datetime
Numeric input data must be a matrix with three or six columns, or else three, six, or seven separate numeric arrays. You can also create datetimes from a single numeric array using the 'ConvertFrom' parameter. |
Hast du dir denn daraufhin mal die 'ConvertFrom' - Option angesehen? Empfehlung:
Zitat: |
D.h. ich müsste A und B auf das gleiche Format bringen und dann sollte der find Befehl funktionieren? |
Zumindest stehen die Chancen damit besser. Wenn du aber quasi erwartest, dass '27.10.2022 00:30:00' und '27.10.2022' als gleich gelten, wirst du vermutlich enttäuscht. Da musst du vorab wohl noch
dateshift
anwenden.
Für weitere Unterstützung stelle bitte einen Datenausschnitt und die gewünschten Ergebnisse als .mat-Datei zur Verfügung, ggf. gezippt.
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 - 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.
|
|