Matlab:将NaNs从xlsread转换为空白

时间:2015-08-02 18:45:52

标签: matlab nan

SOM 2.1工具箱遇到了NaN问题。 下面的代码仅适用于单元格数组,而不适用于双精度数字数组。

[D, headers] = xlsread('Workbook2.xlsx', 'Sheet1', 'A2:BE101');
idx    = isnan(D);
D(idx) = {[]}

The following error occurred converting from cell to double:
Error using double
Conversion to double from cell is not possible.

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

首先,你不能这样做:D(idx) = {[]}如果你有一个双数组。

然后,isnan不适用于单元格数组。考虑以下单元格:

a = cell(2,2);
a{1,1} = NaN;
a{1,2} = 2;
a{2,1} = NaN;
a{2,2} = 'hi';
你可以使用isnan元素(在单元格的每个元素上),例如:

isnan(a{1,1})
=
    1

或当单元格的所有元素都是同一类型时,您可以先使用cell2mat函数进行转换,然后立即使用isnan检查所有元素,例如:

a = cell(2,2);
a{1,1} = NaN;
a{1,2} = 2;
a{2,1} = NaN;
a{2,2} = 3;

c=cell2mat(a)

c =

   NaN     2
   NaN     3

isnan(c)

ans =

     1     0
     1     0

所以答案取决于你拥有的xls sheet以及数据的类型。您可以使用上述选项之一。

更新

如果您使用双数组的示例:

>> D = rand(2,3);
>> D(2,2) = NaN

D =

    0.8147    0.1270    0.6324
    0.9058       NaN    0.0975

>> idx = isnan(D)

idx =

     0     0     0
     0     1     0

>> D(idx) = []

D =

  Columns 1 through 3

    0.8147    0.9058    0.1270

  Columns 4 through 5

    0.6324    0.0975

当然,它将矩阵的结构分解为一个向量。