updating/inserting summary array

hi, i have a summary array where it keeps a count of repeated items. e.g
sumarray = {'red', 2; ...
'blue', 3}
etc. While running a for loop, if a red item appears, I simply want to increment the count to 3 for 'red', if a new category comes in e.g. 'pink' I simply want to add a new row {'pink',1}. What is the most efficient way to implement this?
Thanks.

1 comentario

Cedric
Cedric el 7 de Mayo de 2014
Editada: Cedric el 7 de Mayo de 2014
Are the colors or words that you want to count stored in a cell array as well (as individual words), or are they in a "stream" of text?

Iniciar sesión para comentar.

 Respuesta aceptada

Image Analyst
Image Analyst el 7 de Mayo de 2014
You can use ismember() to check if it's in the list. If it is, increment the second column, if it's not, append it on to the end with a count of 1. See demo code below:
sumarray = {'red', 2; ...
'blue', 3}
% Pick one or the other (red or pink) to test the code.
testWord = 'red'
testWord = 'pink'
column1 = sumarray{:,1}
rowIndex = ismember(testWord, column1, 'rows')
if rowIndex >= 1
sumarray{rowIndex,2} = sumarray{rowIndex, 2} + 1;
else
% Not in there yet. Add it to the end
sumarray{end+1,1} = testWord;
sumarray{end,2} = 1;
end
% See what we ended up with
sumarray

Más respuestas (1)

Cedric
Cedric el 7 de Mayo de 2014
Editada: Cedric el 7 de Mayo de 2014
You would have to test, but here is what I guess is an efficient solution:
colors = {'red', 'black', 'red', 'green', 'red', 'green', 'red'} ;
[uc,~,ic] = unique( colors ) ;
counts = accumarray( ic, 1 ) ;
sumarray = [uc.', num2cell(counts)] ;
For the given dummy set of colors, this outputs
>> sumarray
sumarray =
'black' [1]
'green' [2]
'red' [4]

Categorías

Preguntada:

joh
el 7 de Mayo de 2014

Comentada:

joh
el 7 de Mayo de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by