1

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

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

raw_num并返回正确的raw_txt值,34x1 元胞数组和 34x2 元胞数组。

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

原始数据如下所示:

'a' 'b' 'c' NaN NaN

'd' 'e' 'f' NaN NaN

南 南 南 南 南 南

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

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

感谢帮助

4

2 回答 2

0

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

k = {'a' 'b' 'c' NaN NaN}
k(cellfun(@isnan, k)) = [] ;
于 2017-06-07T09:01:30.173 回答
0

如果NaN元素仅位于矩阵的边缘,如您的示例中所示,您可以先删除带有 all 的行NaN,然后删除带有 all 的列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 循环。

于 2017-06-07T09:52:01.893 回答