подсчет букв в ячейке "матлаб" - PullRequest
2 голосов
/ 02 сентября 2011

как подсчитать уникальные элементы ячейки в matlab? код выше подсчитает количество символов в ячейке, которая мне понравилась

[uniqueC,~,idx] = unique(characterCell); %# uniqueC are unique entries in c
%# replace the tilde with 'dummy' if pre-R2008a
counts = accumarray(idx(:),1,[],@sum);  

но проблема такова:моя ячейка содержит буквы алфавита от а до е.Я хочу найти не «а», а «b» ...... этот код не скажет, что, например, «ноль» есть, если он недоступен.просто будет 4 счета вместо 5

1
2
2
3

, а не

1
2
2
3
0

Как я могу добавить

     a=1
     b=2......

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011

Вы можете использовать ISMEMBER вместо UNIQUE , чтобы решить эту проблему:

characterCell = {'a' 'b' 'b' 'a' 'b' 'd' 'c' 'c'};  %# Sample cell array
matchCell = {'a' 'b' 'c' 'd' 'e'};                  %# Letters to count

[~,index] = ismember(characterCell,matchCell);  %# Find indices in matchCell
counts = accumarray(index(:),1,[numel(matchCell) 1]);  %# Accumulate indices

И вы должны получить следующее для counts:

counts =

     2
     3
     2
     1
     0

EDIT:

Если я правильно понимаю ваш комментарий, звучит так, будто вы хотите сохранить или отобразить буквы вместе с их количеством вхождений. Один из способов сделать это - собрать их вместе в массив ячеек 5 на 2, сначала преобразовав counts в массив ячеек, используя NUM2CELL :

>> results = [matchCell(:) num2cell(counts)]

results = 

    'a'    [2]
    'b'    [3]
    'c'    [2]
    'd'    [1]
    'e'    [0]

Или вы можете создать массив символов для их отображения, преобразовав counts в строку, используя NUM2STR :

>> results = strcat(char(matchCell(:)),':',num2str(counts))

results =

a:2
b:3
c:2
d:1
e:0
2 голосов
/ 02 сентября 2011

Вы можете добавить все возможные символы в массив ячеек при вызове функции UNIQUE, чтобы получить как минимум одно вхождение каждого из них, тогда мы просто вычтем 1 из всех значений, возвращаемых ACCUMARRAY.

Пример:

characterCell = {'a' 'b' 'b' 'a' 'b' 'd' 'c' 'c'};

allPossibleChars = {'a' 'b' 'c' 'd' 'e'};  %# list of all possible characters
c = [characterCell allPossibleChars];      %# make sure all chars are represented
[uniqueC,~,idx] = unique(c);
counts = accumarray(idx(:),1,[],@sum) - 1; %# subtract one from occurrences

Результат:

>> counts
counts =
     2
     3
     2
     1
     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...