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

cell2mat funktioniert nicht

 

smaica
Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2012, 15:07     Titel: cell2mat funktioniert nicht
  Antworten mit Zitat      
Hallo,

ich möchte die aus einer Matrix als Spaltenvektor eingelesenen Werte (vom Txp cell) in den Typen double wandeln. Wenn ich versuche das ganze mit Klammern zu lösen:

Code:
Daten = raw{2:zeilen,4};


bekomme ich lediglich einen 1x1 großen Vektor, allerdings vom Typen double, wenn ich mache:

Code:
Daten = [raw{2:zeilen,4}];


dann bekomme ich einen viel zu großen Spaltenvektor vom Typ char.

und

Code:
Daten_50Hertz = raw(2:zeilen,4);
Daten_50Hertz = cell2mat(Daten_50Hertz);


produziert den Fehler:

Error using cell2mat (line 46)
All contents of the input cell array must be of the same data type.


Kann mir jemand weiterhelfen?

Vielen Dank
smaica
Private Nachricht senden Benutzer-Profile anzeigen


smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2012, 15:59     Titel:
  Antworten mit Zitat      
ich habs jetzt so gelöst:

Code:
Daten = raw(2:zeilen,4); %
idx = cellfun(@ischar,Daten);
data = zeros(size(Daten));
data(~idx) = cell2mat(Daten(~idx));
data(idx) = str2double(regexprep(Daten(idx),'\D',''));
data = data';


allerdings habe ich jetzt das problem, dass die Daten, die mit Kommastellen angegeben sind ohne Kommastellen wiedergegeben werden und so aus einer 0,5 eine 5 wird.

Weiß jemand wie ich angebe, dass bei jedem Wert eine stelle hinter dem Komma angegeben wird?


Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2012, 16:00     Titel:
  Antworten mit Zitat      
Hallo,

Die Fehlermeldung ist doch eigentlich recht hilfreich.

Deine Cell beinhaltet unterschiedliche Datentypen.

cell2mat verlangt für jede cell den gleichen Datentyp.

Ich vermute mal, dass du an einigen Stellen Strings stehen hast.

Auch '1.32121' ist ein String!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.10.2012, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

ist es eventuell so, dass in der Textdatei Komma als Dezimaltrennzeichen verwendet wird? Dann würde ich im Rahmen einer Vorverarbeitung alle Kommata durch Punkte ersetzen.

Es würde helfen zu sehen, welche Daten hier wie eingelesen werden.

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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2012, 16:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja, es werden tatsächlich Kommas verwendet.
Ich habe versucht die Kommas über comma2point (diese im Internet gefundene funktion:)

Code:
function comma2point(File)
% Generate a new file named Oldfilename_Modified.ending. In the new File all
% ',' are changed to '.' Needs a full datapath and filename as input.
   
    Name=textscan(File,'%s%s','delimiter','.');
    NewFile=strcat(Name{1}, '_Modified.',Name{2});
    copyfile(File, NewFile{1});
    file    = memmapfile(NewFile{1},'Writable',true);
    comma   = uint8(',');
    point   = uint8('.');
    file.Data(( file.Data==comma)' ) = point;
    delete(file)
end


zu ändern, allerdings kommt bei mir immer der Fehler:

Undefined function 'comma2point' for input arguments of type 'char'.

weißt du warum?
Meine Einzulesende Datei ist eine Excel-Matrix und ich habe den vollen Pfad angegeben.

LG
smaica
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.10.2012, 16:48     Titel:
  Antworten mit Zitat      
Hallo,

wo hast du diese comma2point gespeichert?
Sie muss unter dem Namen comma2point.m im momentanen Verzeichnis oder einem Verzeichnis, das auf dem MATLAB-Suchpfad liegt, abgespeichert sein.

Was genau ist eine "Excel-Matrix"? Meinst du evtl. eine .csv-Datei?

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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2012, 17:01     Titel:
  Antworten mit Zitat      
Nein, ich habe .xls Dateien.

Ich habe comma2point unter selbigem Namen in dem Verzeichnis gespeichert in dem auch mein Matlabprogramm liegt und dann auf den Button "Add ... zu Search Path" geklickt.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann sollte das an sich gefunden werden.

Wenn du .xls-Dateien hast, sollte das Dezimaltrennzeichen keine Rolle spielen, da die Datei nur je nach Ländereinstellung unterschiedlich angezeigt wird. xlsread sollte das jedoch egal sein. Wie gesagt:

Zitat:
Es würde helfen zu sehen, welche Daten hier wie eingelesen werden.

Also eine Beispieldatei und die zum Einlesen verwendeten Befehle.

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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 13:56     Titel:
  Antworten mit Zitat      
Hallo,

Ich habe jetzt mal die Tabelle als Bild angehangen, da das Anhängen der Datei irgendwie nicht funktioniert hat?!

LG

tabelle.png
 Beschreibung:
tabelle

Download
 Dateiname:  tabelle.png
 Dateigröße:  57.2 KB
 Heruntergeladen:  850 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2012, 16:24     Titel:
  Antworten mit Zitat      
Hallo,

bitte stelle auch die zum Einlesen verwendeten Befehle zur Verfügung und versuche noch einmal, die Datei "richtig" hochzuladen. Ich möchte nun nicht wirklich die Excel-Datei abtippen.
Je besser man das Problem nachvollziehen kann, desto besser kann man helfen.

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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 14:02     Titel:
  Antworten mit Zitat      
Hallo,

der Befehl den ich zum EInlesen verwende lautet:

Code:
[nums, txt, raw] = xlsread(['online_solarhochrechnung_', num2str(i), '_', num2str(k), '.xlsx']);


datas.(raw[1,4]) = raw(2:zeilen,4);
idx = cellfun(@ischar,Daten_50Hertz); % strings finden
data = zeros(size(datas.(raw{1,4})));
data(~idx) = cell2mat(datas.(raw{1,4})(~idx)); % numerische daten convertieren
data(idx) = str2double(regexprep(datas.(raw{1,4})(idx),'\D',''));
datas.(raw{1,4}) = data';


und die Datei sollte jetzt hoffentlich angehängt sein, ich lese die Datei als .xlsx ein, allerdings kann ich dies hier nicht hochladen.

LG
smaica

online_solarhochrechnung_3_12_xls.xls
 Beschreibung:

Download
 Dateiname:  online_solarhochrechnung_3_12_xls.xls
 Dateigröße:  110.5 KB
 Heruntergeladen:  377 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2012, 14:28     Titel:
  Antworten mit Zitat      
Hallo,

In dieser Zeile
Code:
datas.(raw[1,4]) = raw(2:zeilen,4);
brauchst du {} statt [].

Was ist Daten_50Hertz?

Es ist typischerweise viel angenehmer, mit den numerischen Daten (bei dir: nums) und den Textdaten (bei dir: txt) direkt zu arbeiten anstatt sich mit den Rohdaten herumzuplagen.

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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 14:47     Titel:
  Antworten mit Zitat      
Super, jetzt habe ich die richtigen Werte!

Das mit raw ist mir auch schon aufgefallen, das ändere ich vllt noch.

Daten_50Hertz habe ich vergessen zu ersetzen, das ist mein "datas.(raw[1,4])".

Vielen herzlichen Dank für die ausführliche Hilfe!
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 - 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.