Matlab 中的 xlsread returns NaN 即使 Excel 中没有数据

xlsread in Matlab returns NaN even there is no data in Excel

我使用 xlsread 读取 xlsx 文件。我希望 rawdata 将 return 一个 34x3 元胞数组。

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

raw_numraw_txt return 正确值,34x1 元胞数组和 34x2 元胞数组。

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

原始数据如下所示:

'a' 'b' 'c' NaN NaN

'd' 'e' 'f' NaN NaN

NaN NaN NaN NaN NaN

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

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

感谢帮助

您可以像下面这样删除 NaN:

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

如果 NaN 元素仅位于矩阵的边缘,如您的示例所示,您可以先删除所有 NaN 的行,然后删除所有 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)) = [];

你必须这样做的原因是因为 cellfun 不保留维度,所以你必须在每个维度上单独 运行 它。或者,您可以编写一个 for 循环。