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

Posted

技术标签:

【中文标题】如何让 Matlab 知道“NaN”应该被视为 NaN?【英文标题】:How to let Matlab know 'NaN' should be treated as NaN? 【发布时间】:2017-05-22 00:51:31 【问题描述】:

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

我的代码:

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.Uk,...
        'UniformOutput', false).'),1);
    U_sum24t(k) = sum(Z_24TimeStepsk,col_to_sum24tU);
end

出现以下错误信息:

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

我想让 Matlab 将所有“NaN”都视为 NaN,这样我就可以执行计算。 我已经尝试过的方法:将 Excel 中的 NaN 替换为空格,然后在 Matlab > 导入数据 > “用 NaN 替换空格” > 不工作,仍然显示字符串格式

【问题讨论】:

【参考方案1】:

本质上,您是将数据提取到元胞数组中。我要做的是将“NaN”值保留在 Excel 电子表格中,并使用 Matlab 代码将字符串“NaN”更改为数字 NaN。然后您可以使用cell2mat 将元胞数组转换为数值数组,这样您就可以进行像sum 这样的数值运算。

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

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

错误信息与sum有关,所以问题出在一行

U_sum24t(k) = sum(Z_24TimeStepsk,col_to_sum24tU);

错误告诉我Z_24TimeStepsk,col_to_sum24tU 是一个元胞数组,所以让我们将其设为临时变量:

mycellarray = Z_24TimeStepsk,col_to_sum24tU;

现在我们有了一个元胞数组,我们可以执行以下操作将 'NaN' 替换为 NaN:

mycellarraystrcmp(mycellarray, 'NaN') = NaN;

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

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

【讨论】:

没问题!很高兴它有帮助!

以上是关于如何让 Matlab 知道“NaN”应该被视为 NaN?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab 将[ ]变成NaN

matlab 如何用插值给NAN赋值

链接 AnyLogic 和 Matlab

numpy中处理含nan数据的统计函数及其效率

求助!急!matlab中 NaN会参与运算吗

matlab中计算结果出现“NAN”是啥意思?