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
当然是把矩阵的结构打散成一个向量
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
当然是把矩阵的结构打散成一个向量