【问题标题】:Extract Sequence of Rows in Column (MATLAB)提取列中的行序列 (MATLAB)
【发布时间】:2014-07-17 19:35:11
【问题描述】:

我正在尝试从 MATLAB 中的一列数据中提取一系列行。例如,我的数据在一列中如下所示:

10 
20 
30 
40 
50 
60 
70 
80 
90 
100 
110 
120 
130

我想选择一个行序列并将这些行存储在列向量A 中,在提取前 3 行跳过 2 行然后选择接下来的 3 行并跳过 2 行并选择下 3 行之后看起来像这样到列的末尾。

最后,9 rows and 1 column 的数据应该是这样的:

10 
20
30
60 
70 
80
110 
120
130

谢谢!

【问题讨论】:

    标签: matlab row sequence


    【解决方案1】:

    我刚刚想出了另一种方法来补充使用find 函数的好解决方案。

    如果我的数据是:

    x = [10; 20; 30; 40; 50; 60; 70; 80; 90; 100; 110; 120; 130]
    

    然后我想提取重复的行序列:
    开发重复模式或保留 (3) 和跳过 (2) 行的行序列的索引。我的索引是:

    index = [1:5 1:5 1:5] 
    

    index = 123451234512345  
    

    然后使用find 函数对“保留”序列进行逻辑索引。

    a = find(index<4)
    

    给出:

    a = 1 2 3 6 7 8 11 12 13  
    

    然后:

    b = x(a) 
    

    产生

    b = 10 20 30 60 70 80 110 120 130
    

    【讨论】:

      【解决方案2】:

      x = [10 20 30 40 50 60 70 80 90 100 110 120 130].'; %'// data
      m = 3; %// keep
      n = 2; %// skip
      

      然后

      y = x(mod(0:end-1,m+n)<=m-1);
      

      或等效

      y = x(mod(0:numel(x)-1,m+n)<=m-1);
      

      这是如何工作的:生成序列0,1,2,... numel(x)-1。每个数字对应x 中的一个位置。要保持m 并循环跳过n,请将mod(...,m+n) 应用于该序列。例如,对于m=3n=2,结果是序列0,1,2,3,4,0,1,2,...。然后选择&lt;=m-1 的那些数字(即x 的对应条目)。这会导致周期性模式“保持、保持、保持、跳过、跳过”。


      先跳过再保留(从上面反转):只需反转不等式:

      y = x(mod(0:end-1,m+n)>=m-1);
      

      y = x(mod(0:numel(x)-1,m+n)>=m-1);
      

      【讨论】:

      • 不错的是use of end within mod :-)
      • 完全正确,在使用我的 bsxfun 单独计算索引时丢失了 :)
      【解决方案3】:

      试试这个,假设 a 是你的输入列向量 -

      r_accept = 3; %// number of rows to accept
      r_reject = 2; %// number of rows to reject
      
      ind1 = bsxfun(@plus,1:r_accept+r_reject:numel(a),[0:r_accept-1]') %//'
      out = a(ind1(ind1(:)<=numel(a))) %// desired output
      

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 2022-07-25
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        相关资源
        最近更新 更多