Matlab:将 NaN 从 xlsread 转换为空白

Matlab: convert NaNs from xlsread to blank

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.

有什么建议吗?

首先你不能这样做: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

当然是把矩阵的结构打散成一个向量