【问题标题】:Generate derived matrix from index vector in matlab从matlab中的索引向量生成派生矩阵
【发布时间】:2014-04-24 09:49:33
【问题描述】:

考虑一个由 1 和 0 组成的索引向量:

I=[0 0 1 0 1 1 0 0 0];

如何在matlab中轻松生成如下矩阵:

J=[0 2;
  1 1;
  0 1;
  1 2;
  0 3];

【问题讨论】:

    标签: matlab


    【解决方案1】:

    使用diff:

    I = [0 0 1 0 1 1 0 0 0];
    d = diff(I);
    ind = [1 find(d~=0)+1]; %// starting index of each new value
    rep = diff([ind numel(I)+1]); %// number of repetitions of each new value
    J = [ I(ind).' rep.' ];
    

    【讨论】:

      【解决方案2】:

      使用strfind 做一个稍微大一点的例子 -

      I =[1 1 0 0 1 0 1 1 0 0 0 1 1 1 1 0 0]
      zero_pos = ['0' num2str(bsxfun(@eq,I,0),'%1d') '0']
      ind3 = [ strfind(zero_pos,'01') ; strfind(zero_pos,'10')]
      counts = diff(ind3(:))
      
      var = zeros(numel(counts),1);
      var(2:2:end)=1;
      J = [var counts];
      if ind3(1,1)-1>0
          J = [1 ind3(1,1)-1;J];
      end
      

      输出

      J =
           1     2
           0     2
           1     1
           0     1
           1     2
           0     3
           1     4
           0     2
      

      【讨论】: