How to divide a matrix and find the index?

1 次查看(过去 30 天)
Hi there, I have a matrix such as a = ['hello' 'hi' 'bye';1 3 5], i want to use the 2nd column to categorize the matrix, but what i have in mind is:
x = a(a(:,2)==1,:); y = a(a(:,2)==3,:); z = a(a(:,2)==5,:);
but when there are many categorizations, i think this method can be very dumb and long, i wonder whether there is a simple way or function to deal with this?
PS: i know histc can categorize a vector and return a index matrix, but the index histc returns cannot be used to find the original index of the original matrix.

采纳的回答

Walter Roberson
Walter Roberson 2015-5-19
[uvals, ia, ic] = unique(a(:,2));
categorized = accumarray(ic, (1:size(a,1))', [], @(v) {a(v,:)});
  2 个评论
Weiqian Jiang
Weiqian Jiang 2015-5-19
thanks for your help, i've helped about accumarray and find it useful in solving my problems, although it might be difficult to understand.. thanks again!
Weiqian Jiang
Weiqian Jiang 2015-5-19
maybe histc and arrayfun can be easier to handle this problem [n bin] = histc(a(:,2),low:step:high) groups = low:step:high arrayfun(@(x)a(bin==x,:),groups,'uniform',0);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by