代码之家  ›  专栏  ›  技术社区  ›  ThomasIsCoding

MATLAB中的任何内置函数都可以像R中的“ave”一样工作?

  •  1
  • ThomasIsCoding  · 技术社区  · 5 年前

    我正在寻找一个内置的功能 MATLAB 它可以以类似的方式与 ave 在里面 R .


    R

    set.seed(0)
    x <- sample(c("A", "B"), 10, replace = TRUE)
    xid <- ave(seq_along(x), x, FUN = seq_along)
    

    > x
     [1] "B" "A" "B" "A" "A" "B" "A" "A" "A" "B"
    > xid
     [1] 1 1 2 2 3 3 4 5 6 4
    

    MATLAB x 然后按组分配序列ID,这样我就可以得到一个类似 xid . 我知道 splitgroup

    0 回复  |  直到 5 年前
        1
  •  4
  •   Luis Mendo    5 年前

    问题要求替换中的每个条目 x 就目前为止发生的次数而言。

    x = ['B' 'A' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'B']; % example data. Row vector
    
    • 代码短,但内存效率低(计算中间值 N N 矩阵,在哪里 N ):

      xid = sum(triu(x==x.'));
      
    • U N 矩阵,在哪里 是的唯一元素数

      t = x==unique(x).';
      xid = nonzeros(t.*cumsum(t,2)).';
      
    • 没趣的

      xid = NaN(size(x)); % preallocate
      for u = unique(x)
          t = x==u;
          xid(t) = 1:sum(t);
      end