Use cells rather than matrices to sort a matrix into 255 separate lists

Asked by Rebecca on 11 Jul 2012
Latest activity Commented on by Rebecca on 11 Jul 2012

I am trying to write a program that will sort an nx5 matrix into 255 separate lists (and it was suggested that I use cells to do this). n is usually upwards of 600,000. The numbers in the 5th column range from 1 to 255 (all are repeated), and they identify which basket the row belongs in. I am unfamiliar with how cells work, but since their size does not need to be pre-allocated, someone said this would be a good tool to use. I would like to label the baskets from 1 to 255, basket(i), or something to that effect, but I don't know the correct syntax to do that. "flag" and "switch" were also suggested. Would it be best to loop through the entire nx5 matrix and sort the rows into baskets that way? Any help with this would be appreciated. Thank you!

0 Comments

Rebecca

Products

No products are associated with this question.

1 Answer

Answer by Kye Taylor on 11 Jul 2012
Accepted answer

If I understand your question, the following may help

% create array like yours... n-by-5, last column has index of "bin" which
% will be in the set {1,2,...,maxIndex}
n = 10;
maxIndex = 5;
C = [rand(n,4),randi(maxIndex,n,1)];
% idx is a n-by-1 cell array where idx{j} contains the indices of rows
% belonging to bin j
idx = accumarray(C(:,5), 1:size(C,1),[],@(C){C});
% collect those rows from the matrix belonging to bin j into the jth cell
% of bins
bins = cellfun(@(x)C(x,:),idx,'uniformoutput',false);

2 Comments

Kye Taylor on 11 Jul 2012

If only accumarray could take a cell array as its second input... wouldn't that be sweet.

Rebecca on 11 Jul 2012

Thank you so much! This is exactly what I needed.

Kye Taylor

Contact us