title: Matlab's Accumarray equivalent in C++
body: <p>I found a solution for matlab's accumarray equivalent in c++ with armadillo <a href="https://stackoverflow.com/questions/8950807/is-there-an-example-for-accumarray-in-c-c">here</a>. Although the code works like it should in matlab, my problem is that is takes a lot of time. It takes approximately 2.2 seconds to run and i have to call this function around 360 times. Is there a way to optimize this code or anyother way to implement accumarray in c++ with armadillo/opencv/boost? I know python has a bitcount function with numpy which is fast and efficient but i cant find anything in c++.</p>
  
  <p>Thank You</p>
  
  <p>EDIT</p>
  
  <p>Currently I am using the following function, as it can be seen in the link attached</p>
  
  <p><strong>Code:</strong></p>
  
  <pre><code>colvec TestProcessing::accumarray(icolvec cf, colvec T, double nf, int p)
  {
      /* ******* Description   *******
  
      here cf is the matrix of indices
  
      T is the values whose data is to be
      accumulted in the output array S.
  
      if T is not given (or is scaler)then accumarray simply converts
      to calculation of histogram of the input data
  
      nf is the the size of output Array
  
      nf &gt;= max(cf)
      so pass the argument accordingly
  
      p is not used in the function 
  
      ********************************/
  
      colvec S; // output Array 
  
      S.set_size(int(nf)); // preallocate the output array 
  
      for(int i = 0 ; i &lt; (int)nf ; i++)
      {
          // find the indices in cf corresponding to 1 to nf
          // and store in unsigned integer array q1 
          uvec q1 = find(cf == (i+1));
          vec q ;
          double sum1 = 0 ;
  
          if(!q1.is_empty())
          {
              q = T.elem(q1) ; // find the elements in T having indices in q1 
              // make sure q1 is not empty 
  
              sum1 = arma::sum(q); // calculate the sum and store in output array 
              S(i) = sum1;
          }
  
          // if q1 is empty array just put 0 at that particular location
          else
          {
              S(i) = 0 ;
          }
      }
      return S;
  }
  </code></pre>