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

Suche Umwandlung von cells in double

 

jh4711
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 10.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 12:27     Titel: Suche Umwandlung von cells in double
  Antworten mit Zitat      
Hallo zusammen,

ein leidiges Thema: Die Umwandlung von Zellen vom Typ Cells in Double. Dieses Mal innerhalb einer Matrix.

Ich habe einen Table mit drei Spalten:

Code:

>> table_Preis(1:6,1:3)

ans =

  6×3 table

         isin            datum          preis  
    ______________    ____________    __________

    'GB00B1YW4409'    '31.12.1999'    [688.1300]
    'GB00B1YW4409'    '03.01.2000'    [688.1300]
    'GB00B1YW4409'    '04.01.2000'    [690.6200]
    'GB00B1YW4409'    '05.01.2000'    [666.9500]
    'GB00B1YW4409'    '06.01.2000'    [650.7600]
    'GB00B1YW4409'    '07.01.2000'    [663.2200]
 


Mit table_Preis.preis=cell2mat(table_Preis.preis) bekomme ich es auch hin, mit den Preisen zu rechnen.

Wenn ich nun aber mit unstack pivotisiere, springt das Format wieder auf Cells zurück:

Code:
>> piv_Daten_Preis(1:5,1:5)

ans =

  5×5 table

       datum        AT000000STR1    AT0000606306    AT0000642806    AT0000652011
    ____________    ____________    ____________    ____________    ____________

    '31.12.1999'    []              []              []              [10.0900]  
    '03.01.2000'    []              []              []              [10.4900]  
    '04.01.2000'    []              []              []              [10.4700]  
    '05.01.2000'    []              []              []              [10.3000]  
    '06.01.2000'    []              []              []              [10.3000]  

>> piv_Daten_Preis(2,5)*1
Undefined operator '*' for input arguments of type 'table'.


Ich könnte wahrscheinlich über eine Schleife und sprintf/ sscanf das Table füllen, finde ich aber sehr umständlich und es können immer nur 88 Zellen befüllt werden (habe ca. 16 Mio Daten zum Umwandeln). Eine Schleife mit ... = cell2mat(...(i,j)) funktioniert nicht.

Ich weiß, es ist ein leidiges Thema, habe aber schon fast alle Funktionen durch.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.12.2017, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

dieselbe Lösung wie in deinem anderen Thread: { } statt ( ).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jh4711
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 10.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 15:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich dachte mir schon, dass es sowas ist, aber irgendwie bekomme ich es nicht umgesetzt:

Code:

>> piv_Daten_Preis{2,5}

ans =

  1×1 cell array

    {[10.4900]}

>> piv_Daten_Preis{2,5}*1
Undefined operator '*' for input arguments of type 'cell'.
 
>> piv_Daten_Preis=unstack({table_Preis},'preis','isin');
Undefined function 'unstack' for input arguments of type 'cell'

piv_Daten_Preis=unstack(table_Preis,{'preis'},{'isin'});
>> piv_Daten_Preis(2,5)

ans =

  table

    AT0000652011
    ____________

    [10.4900]  

>> piv_Daten_Preis(2,5)*1
Undefined operator '*' for input arguments of type 'table'.
 


Da sind zwar auch Kombis dabei, die keinen Sinn ergeben, aber ich möchte ja nichts unausprobiert lassen.

Wo setze ich denn die {}? In table_Preis sind die Preise als zahl festgelegt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.12.2017, 18:20     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal
Code:
table_Preis.preis = cell2mat(table_Preis)

Noch besser ist es, wenn du schon beim Import dafür sorgst, dass die Daten als Double ankommen. Sonst wird nur Speicherplatz verschwendet.

Ist immer schwierig, wenn man mit den Daten nicht tatsächlich spielen kann. Leichter wäre es mit einem .mat File.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jh4711
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 10.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2017, 22:45     Titel:
  Antworten mit Zitat      
1. Wie kann ich die denn direkt als double einlesen? In der Quell (Access) sind die als solche deklariert und importieren mache ich per

Code:

DB = adodb_connect('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database2.accdb; Persist Security Info=False;');

Daten_Preis=adodb_query(DB, 'select * from  Preis');
Abfrage_Preis=adodb_query(DB, 'select Constituents.isin, Constituents.datum, Preis.preis from Constituents inner join Preis on (Constituents.isin=Preis.isin and Constituents.datum=Preis.datum)');
 


2. Deinen Code habe ich schon ausprobiert und funktioniert. Nur wenn ich diese Daten (table_Preis) mit unstack pivotisiere, verliert der preis seine datentyp.

Code:
piv_Daten_Preis=unstack(table_Preis,'preis','isin');
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.12.2017, 09:20     Titel:
  Antworten mit Zitat      
Hallo,

1. ich vermute, du verwendest den File Exchange-Eintrag? Da kann ich auch nur empfehlen, die Doku dort anzusehen um zu sehen, welche Möglichkeiten die Funktion bietet.

2. Was meinst du mit "verliert den Datentyp"? Eine Variable hat immer einen Datentyp. Vermutlich meinst du also, dass sich der Datentyp ändert? Von was auf was? Kannst du das nicht zurückändern?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jh4711
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 10.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2017, 19:13     Titel:
  Antworten mit Zitat      
1.Puh, gute Frage. Mir sind die oben beschriebenen Funktionen "zugefallen" und führen die Abfrage recht einfach aus.

2. Ich möchte von table_Preis (nx3 Matrix mit unstack zu Piv_Daten_Preis (a x b Matrix). Mit deiner Funktion "table_Preis.preis = cell2mat(table_Preis.preis)" kann ich die Spalte 3=preis in Zahlen umwandeln und darauf zugreifen. Sobald ich die Funktion unstack ausführe, kann ich nicht mehr mit den Preisen rechnen, die wir umgewandelt haben. Ich weiß leider nicht, wie ich es genauer ausdrücken soll. Wie kann ich den Datentyp einer Zelle ausgeben lassen? Nach unstack befinden sich die Zahlen/ Preise in ecigen Klammern [ ]

Schöne Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
jh4711
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 10.12.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2017, 18:10     Titel:
  Antworten mit Zitat      
Entweder bin ich ein Esel, oder ich habe die Daten aus Verzweiflung zu sehr gequält:
mit piv_Abfragen_P{5,5} klappt es... Embarassed
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.