2017-03-14 6 views
0

Ich habe eine Tabelle, die alle Zahlen wie gelesen von Excel mit readtable ist. Einige der Zahlen kommen in Apostrophen wie "0,084" usw. vor. Dies liegt daran, dass die Excel-Tabellen unordentlich mit Wörtern sind, die in einigen Spalten, aber außerhalb der Tabellendaten erscheinen. Die Verwendung von isstring ergibt 0. Mein Hauptziel ist es, die Tabelle in ein 3D-Array umzuwandeln (ist es möglich, eine 3D-Tabelle zu erstellen?). Wie konvertiere ich die Zellen, die als "x" erscheinen, in Zahlen, so dass ich mein 3D-Array (aus mehreren dieser Tabellen) erstellen kann.Konvertieren von gemischten Tabelle zu Array Matlab

Zum Beispiel var11 in dieser Tabelle kommt als einer der Täter durch: enter image description here

verschiedene Tabellen verschiedene Standorte für diese Zellen haben können. Der Versuch, die gesamte Tabelle zu konvertieren Array gibt einen Fehler:

B = table2array(z); 
Error using table2array (line 27) 
Cannot concatenate the table variables 'Var3' and 'Var11', because 
their types are double and cell. 
+0

Zeigen Sie einen Screenshot der importierten Tabelle aus Ihrem Matlab-Arbeitsbereich oder fügen Sie eine kleine Teilmenge Ihrer Daten ein, um uns ein besseres Verständnis zu vermitteln. – Wolfie

Antwort

0

ischar('0.084') gibt 1 zurück, und es gibt keine IstZeichenfolge. Um den Wert von table zu erhalten, verwenden Sie Zellenarray-Begriff - A {i, j}. Die meisten Zellen funktionieren jedoch nicht und Sie können cellfun nicht verwenden. Also schlage ich eine einfache Doppelschleife vor:

for i = 1 : N 
    for j = 1 : M 
     val = A{i,j}; 
     if (ischar(val)) 
     val = str2num(val); 
     end 
     M(i,j) = val; 
    end 
end 

Es gibt wahrscheinlich eine elegantere Lösung. Sie können danach suchen: https://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-table.html

Um zu konvertieren, verwenden Sie str2num. Beachten Sie, dass Matlab standardmäßig auf Doppel funktioniert und Sie doppelt erhalten.

3D-Arrays sind in der Tat möglich - beispielsweise erzeugen Nullen (10,10,3) ein 10x10x3-Array von Nullen (vom doppelten Typ).

+0

Danke. Wenn meine Tabelle "z" ist, dann gibt ischar (z (1,9)) für eine der angreifenden Zellen 0 statt 1 zurück. Daher meine Schwierigkeit, die ganze Tabelle in ein Array umzuwandeln, da ich keinen Typ von einem anderen bestimmen kann. – Mary

+0

Was sagt das für 'z'? Zelle? Wenn es sich um eine Zelle handelt, sollten Sie 'cellfun (...)' verwenden, um mehrere Datenelemente gleichzeitig zu bearbeiten. Oder benutze z {1,9}, um den Wert innerhalb der Zelle zu erhalten (String in diesem Fall). –

+0

whos ('z') gibt die Klassen-Tabelle zurück – Mary

Verwandte Themen