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_num
和 raw_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 循环。
我使用 xlsread
读取 xlsx 文件。我希望 rawdata
将 return 一个 34x3 元胞数组。
[raw_num raw_txt rawdata]=xlsread('file.xlsx');
raw_num
和 raw_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 循环。