【问题标题】:copying every nth line and duplicating it on it's following line复制每第 n 行并将其复制到下一行
【发布时间】:2013-10-31 03:31:53
【问题描述】:

我正在尝试为该项目制作测试文件,我想通过一个正常心电图的示例文件制作心动过缓测试文件。

因此,我需要每隔三行复制一次并将其插入下一行。

例如:

a = [
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10]

我想要:

b = [
    1
    2
    3
    3
    4
    5
    6
    6
    7
    8
    9
    9
    10]

等等...但由于文件长度为 6000 个字符,显然我无法手动复制它。而且我需要它有 9000 个字符长我已经尝试在网上查找如何执行此操作,但没有运气。

有什么建议吗?

【问题讨论】:

  • 你问题的第一句话对我来说毫无意义。它与问题有关吗?向量ab 是数据示例,还是只是文本行应如何重复的示例?

标签: matlab


【解决方案1】:
b=zeros(floor(4/3*length(a)),1);
b(1:4:end)=a(1:3:end);
b(2:4:end)=a(2:3:end);
b(3:4:end)=a(3:3:end);
b(4:4:end)=a(3:3:end);

【讨论】:

  • 这太棒了!另一件事是向量'a'是6000x1所以它看起来像这样:a = 1 2 3 4 5 6 7 8 9 10 我想要:b = 1 2 3 3 4 5 6 6 7 8 9 9 10
  • 对不起,我已经编辑了我的答案,只是对b的初始化进行了更改。
【解决方案2】:

另一种方式:

b = a(sort([1:numel(a) 3:3:numel(a)]))

【讨论】:

    【解决方案3】:

    这是第三种更快更简单的方法

    b = a(round(1:0.75:numel(a)))
    

    【讨论】:

      【解决方案4】:

      这仅在length(a)3 的倍数时才有效,但似乎比其他答案更快,至少对于大型向量而言:

      b = reshape([reshape(a,3,[]); a(3:3:end).'],[],1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 2021-12-01
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        相关资源
        最近更新 更多