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

标签 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替换空白”>不起作用,仍然显示字符串格式

最佳答案

本质上,您是将数据提取到元胞数组中。我要做的是将“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));

关于matlab - 如何让Matlab知道 'NaN'应该被视为NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41519585/

相关文章:

javascript - "Uncaught TypeError: function is not iterable"在 [] 中使用 ... 但在 {} 中有效...?

c - 我正在尝试编写一个函数,从给定的链表中删除所有奇数元素并返回一个地址

C:定义用户可以声明其大小的全局数组变量

c++ - 如何在 FLTK Multiline_Input 中自动在文本末尾添加换行符?

matlab - 灰度分割/特征提取/ Blob 检测?

c++ - 使用刷新的输入从 C++ 调用 Matlab

matlab - 如何使用 2d dct 获取 png 图像的特征?

postgresql - 循环 CopyTo 查询

python - 使用ARPACK求解特征值问题,但与Matlab得到的结果不一致

java - 逐行而不是逐字阅读文件