如何让Matlab知道' NaN'应该被视为NaN?

时间:2017-01-07 08:46:58

标签: matlab function input nan

我已将以下.xlsx文件导入Matlab:

enter image description here

我的代码:

U_sum24t = zeros(height(Z_24TimeSteps),1);
col_names24tU = Z_24TimeSteps.Properties.VariableNames; 
for k = 1:height(Z_24TimeSteps)
    col_to_sum24tU = any(cell2mat(...
        cellfun(@(x) strcmp(col_names24tU,x),Z_24TimeSteps.U{k},...
        'UniformOutput', false).'),1);
    U_sum24t(k) = sum(Z_24TimeSteps{k,col_to_sum24tU});
end

发生以下错误消息:

Undefined function 'sum' for input arguments of type 'cell'.

我想让Matlab对待所有' NaN'作为NaN,所以我可以执行计算。 我试过的:用空格替换Excel中的NaN,然后​​在Matlab中>导入数据> "用NaN替换空白" >不工作,仍然显示字符串格式

1 个答案:

答案 0 :(得分:3)

基本上,您将数据提取到单元格数组中。我要做的是保持' NaN' Excel电子表格中的值并使用Matlab代码更改字符串' NaN'到数字NaN。然后,您可以使用cell2mat将单元格数组转换为数字数组,以便执行sum等数字操作。

为了更清楚,让我们分解您的具体错误:

Undefined function 'sum' for input arguments of type 'cell'.

错误消息与sum有关,因此问题出在

U_sum24t(k) = sum(Z_24TimeSteps{k,col_to_sum24tU});

错误告诉我Z_24TimeSteps{k,col_to_sum24tU}是一个单元格数组,所以让它成为一个临时变量:

mycellarray = Z_24TimeSteps{k,col_to_sum24tU};

现在我们有一个单元格数组,我们可以做以下操作来替换NaN'与NaN:

mycellarray{strcmp(mycellarray, 'NaN')} = NaN;

但我们仍然需要先将其转换为数字数组才能执行sum

U_sum24t(k) = sum(cell2mat(mycellarray));