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

Array vergleichen - Index der gemeinsamen Datensätze ausles

 

mareinki
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.10.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2022, 16:18     Titel: Array vergleichen - Index der gemeinsamen Datensätze ausles
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2022, 21:35     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mareinki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.10.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2022, 11:13     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.10.2022, 13:23     Titel:
  Antworten mit Zitat      
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:
Code:
C=datetime(A, 'ConvertFrom', 'datenum')


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 ;)
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.