【问题标题】:Average of values from a column/ Skip lines (textscan)列的平均值/跳过行(textscan)
【发布时间】:2011-12-23 14:55:49
【问题描述】:

我有一个如下所示的 .txt 文件:

******text*******
(30 lines containing text and *)
******text*******

a b c
a b c
a b c
a b c
a b c
a b c
a b c

(我正在创建一个绘图,其中 a 作为 x,b 和 c 作为 y1 和 y2)

如何使用 textscan 跳过这 30 行?我有这个但是没有用:

[x y1 y2] = textscan('file_name.txt', '%f %f %f', 30);

还有更多:如何计算第三列的平均值?

【问题讨论】:

    标签: matlab file-io textscan


    【解决方案1】:

    如何跳过正在处理的某些行?

    关于跳线,您有几个选项:

    • 如果行数始终是静态的,并且始终位于文件的开头:

      传递HeaderLines,值为 N,N 是您不想处理的数字。

      [x y1 y2] = textscan ('file_name.txt', '%f %f %f', 'HeaderLines', 30 + 2);

    • 如果所有行都以相同的字符串开头

      *传递CommentStyle,其值为ABC,其中ABC 是注释样式。

      如果要跳过的所有行都以* 开头,请将'*' 传递给textscan

      [x y1 y2] = textscan ('file_name.txt', '%f %f %f', 'CommentStyle', '*');


    如何获得某个数组的平均值?

    要获得某个数组的平均值,请使用mean

    y1_average = mean (y1);
    

    textscan的文档

    mean的文档

    【讨论】:

    • Textscan 只有 1 个输出,在示例中是一个 3 元素元胞数组,其中包含 x、y1 和 y2。
    【解决方案2】:

    如果您知道要跳过多少行,请在TEXTSCAN 函数中使用HeaderLines 参数:

    [x y1 y2] = textscan('file_name.txt', '%f %f %f', 'HeaderLines',30);
    

    当您在格式化字符串之后使用整数参数时,这意味着您想要多次应用格式化字符串(在您的情况下要读取的行数)。所以这与你想要的相反。

    获取平均使用MEAN函数:

    y2_avg = mean(y2);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2021-12-12
      • 2016-08-03
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多