【问题标题】:Replace a line containing a special character with nan using textscan in matlab在matlab中使用textscan将包含特殊字符的行替换为nan
【发布时间】:2025-12-23 10:10:06
【问题描述】:

我正在尝试使用 textscan 读取包含以下行的文件

1.0 2.0 3.0 ? 6.0 5.0

11.0 12.0 13.0 15.0 16.0 15.0

21.0 22.0 23.0 25.0 26.0 25.0

31.0 32.0 33.0 ? 36.0 35.0

如何用nan替换问号?

【问题讨论】:

    标签: matlab textscan


    【解决方案1】:

    您是否尝试过将textscan%s %s %s %s %s %s 一起使用并使用str2double 将生成的元胞数组转换为数字

    f = fopen('file.txt');
    raw = textscan(f, '%s %s %s %s %s %s');
    data = [];
    for k = 1:6
        data = [data str2double(raw{k})];
    end
    

    【讨论】:

    • 它不应该因为'?'而停止阅读是一个有效的字符串,即 %s。我在代码示例中进行了编辑。
    • 你试过代码了吗?它确实将问号读作nan。这就是str2double 部分正在做的事情。为什么不在 matlab 中输入str2double('?') 试试
    【解决方案2】:

    您可以使用 TEXTSCAN 并将 'TreatAsEmpty' 指定为 '?'。

    【讨论】: