即使Excel中没有数据,Matlab中的xlsread也会返回NaN

时间:2017-06-07 08:51:36

标签: matlab nan xlsread

我使用xlsread来读取xlsx文件。我希望rawdata将返回一个34x3的单元格数组。

[raw_num raw_txt rawdata]=xlsread('file.xlsx');

raw_numraw_txt返回正确的值,34x1单元格数组和34x2单元格数组。

但是,当我检查rawdata时,它返回139x6单元格数组。它不仅包含excel文件中的数据,还包含NaN元素。对于NaN元素,excel文件中没有数据。我只能假设我可能先输入一些内容然后将其删除。但为什么matlab会读它?

rawdata看起来像这样:

  

'一个' ' B' ' C' NaN NaN

     

' d' ' E' ' F' NaN NaN

     

NaN NaN NaN NaN NaN

使用xlsread时如何避免这种情况?

或者我得到这个矩阵后如何删除NaN?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您可以删除NaN,如下所示:

k = {'a' 'b' 'c' NaN NaN}
k(cellfun(@isnan, k)) = [] ;

答案 1 :(得分:0)

如果=QUERY('Form Responses 1'!A:D,"select A,B,C,D WHERE B = date '"&text(today()-1,"yyyy-mm-dd")&"' ORDER BY B",1) 元素仅位于矩阵的边缘,如示例所示,则可以先删除所有NaN的行,然后删除所有NaN的列。< / p>

NaN

您必须这样做是因为% test data A = {NaN, NaN, NaN, NaN; NaN, NaN, NaN, NaN; NaN, NaN, NaN, NaN}; A{1, 1} = 'a'; A{1, 2} = 'b'; A{2, 1} = 'c'; A{2, 2} = 'd'; fh = @(x) all(isnan(x)); % remove rows with all NaN A(all(cellfun(fh, A),2),:) = []; % remove columns with all NaN A(:,all(cellfun(fh, A),1)) = []; 不保留维度,因此您必须分别在每个维度上运行维度。或者,您可以编写for循环。