2017-03-14 89 views
0

我有一張表,它是使用可讀表從excel中讀取的所有數字。一些數字通過撇號如'0.084'等出現,這是因爲excel表單雜亂無章地出現在某些列中,但在表格數據之外。使用isstring返回0. 我的主要目標是將表格轉換爲3D數組(可以創建3D表格嗎?)。如何將顯示爲'x'的單元格轉換爲數字,以便可以構建我的3D數組(來自這些表格中的幾個表格)。將混合錶轉換爲數組Matlab

例如Var11在此表來通過作爲罪犯之一: enter image description here

不同的表可具有用於這些細胞的不同的位置。 試圖整個錶轉換爲陣列提供了一個錯誤:

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

從Matlab工作區顯示導入表格的屏幕截圖,或者粘貼一小部分數據以便更好地理解。 – Wolfie

回答

0

ischar('0.084')返回1,並且不存在isstring。要從table獲得值,可以使用單元陣列概念 - A {i,j}。大多數單元的東西不會工作,但你不能使用cellfun。所以我建議一個簡單的雙循環:

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 

有可能是一個更優雅的解決方案。您可以在這裏搜索:https://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-table.html

要轉換,請使用str2num。請注意,默認情況下,Matlab在雙精度上運行,您將獲得雙精度。三維數組確實是可能的 - 例如零(10,10,3)將創建一個10x10x3的零數組(雙精度型)。

+0

謝謝。如果我的表是「z」,那麼對於其中一個違規單元,ischar(z(1,9))將返回0而不是1.因此,我無法將整個錶轉換爲數組,因爲我無法確定另一個類型。 – Mary

+0

whos告訴'z'的是什麼?細胞?如果它是單元格,那麼您應該使用'cellfun(...)'同時操作多個數據元素。或者使用z {1,9}來獲取單元格內的值(在這種情況下爲字符串)。 –

+0

whos('z')返回類表 – Mary