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

timetable + synchronize + cell-array/struct

 

010101
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2019, 17:00     Titel: timetable + synchronize + cell-array/struct
  Antworten mit Zitat      
Hallo,

mehre timetables mit unterschiedlichen Variablen (double oder single) sollen synchronisiert (synchronize) werden. Das funktioniert auch wunderbar.

Nun habe ich eine timetable, zu der gehört pro Zeitstempel ein Datensatz. Diese habe ich zunächst als struct, später als cell-array eingefügt. Die einzelne timetable lässt sich erstellen (tt_mit_cell_array_data=timetable(datum, cell_array_data)).

Was nicht geht, ist diese Tabelle mit anderen zu synchronisieren. Die Fehlermeldung lautet dann:
Zitat:
Error using timetable/synchronize (line xx)
All variables in input timetables must support missing values (e.g. floating point, categorical, datetime, duration, or text) when synchronizing using 'default'.


Was kann ich tun, um die Tabellen zusammenzuführen? Bis jetzt waren die timetables sehr praktisch.

LG
010101
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2019, 17:21     Titel:
  Antworten mit Zitat      
Hallo,

ein konkretes Beispiel ist generell hilfreich.

Es scheint die spezielle Option nicht unterstützt zu sein. Dann kann man nur raten, eine andere Option zu versuchen. Wie soll die Synchronisierung denn erfolgen? Sprich: wenn an einer Stelle ein Wert fehlt, wie soll er ermittelt werden?

Das naheliegendste wäre wohl die Option 'fillwithconstant'

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
 
010101
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2019, 17:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja stimmt natürlich: Ein Beispiel wäre hilfreich. Ich werde später eines ergänzen.

Mit NaN sollen die fehlenden Zellen gefüllt werden - also keine Interpolation o.ä.

Mit 'fillwithconstant' habe ich leider ohne Erfolg experimentiert. Vielleicht klärt sich das durch das Beispiel.

VG
010101
Private Nachricht senden Benutzer-Profile anzeigen
 
010101
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2019, 20:47     Titel:
  Antworten mit Zitat      
Anbei ein lauffähiges Beispiel:

Code:
clearvars; clc;
close all;

datum_1(1,1)=datetime('01.01.2000 01:02:03');
x(1,1)=1;
y(1,1)=2;                        
time_table_1 = timetable(datum_1, x, y);

clear datum_1 x y;

datum_1(1,1)=datetime('01.01.2000 02:02:03');
x(1,1)=1;
y(1,1)=2;                        
time_table_2 = timetable(datum_1, x, y);

time_table_3 = [time_table_1; time_table_2];

datum_2(1,1)=datetime('02.01.2000 01:02:03');
bunch_numbers(1,1).daten={2,3,4,5}';
bunch_numbers=struct2cell(bunch_numbers)';
pos(1,1)=2;                        
time_table_4 = timetable(datum_2, bunch_numbers, pos);

clear datum_2 bunch_numbers pos;

datum_2(1,1)=datetime('03.01.2000 01:02:03');
bunch_numbers(1,1).daten={1,7,0,6}';
bunch_numbers=struct2cell(bunch_numbers)';
pos(1,1)=2;                        
time_table_5 = timetable(datum_2, bunch_numbers, pos);

time_table_6 = [time_table_4; time_table_5];

total_time_table = synchronize(time_table_3, time_table_6);


Die Fehlermeldung lautet:
Zitat:
Error using timetable/synchronize (line 321)
All variables in input timetables must support missing values (e.g. floating point, categorical, datetime, duration, or text) when synchronizing using 'default'.

Error in test_timetable (line 34)
total_time_table = synchronize(time_table_3, time_table_6);


Vielen Dank für Hinweise oder sogar die Lösung Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2019, 21:19     Titel:
  Antworten mit Zitat      
Hallo,

da die Datentypen auch noch gemischt sind (teils cell, teils double), fällt mir nur ein unschöner Workaround ein.
Code:
time_table_7 = time_table_6(:, []);
time_table_7.Index = (1:height(time_table_7))';
total_time_table = synchronize(time_table_3, time_table_7);
total_time_table.bunch_number = repmat({[]}, height(total_time_table), 1);
valid = ~isnan(total_time_table.Index);
total_time_table.bunch_number(valid) = ...
    time_table_6.bunch_numbers(total_time_table.Index(valid));
total_time_table.Index = [];


Alternativ auch die Doubles vorübergehend in Cells packen und dann fillwithconstant mit constant {[]}.

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
 
010101
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2019, 22:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

wow - vielen herzlichen Dank!!! In dem Kurzbeispiel funktioniert Deine Lösung. Ich kann sie auch nachvollziehen, habe sie aber noch nicht in meinen etwas umfangreicheren Code eingefügt. Trotzdem kann meine Frage als gelöst betrachtet werden. Klasse!

VG
010101
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.