Как проще всего создать матрицу весов на основе того, как часто каждый элемент появляется в матрице? - PullRequest
4 голосов
/ 23 марта 2012

Это входная матрица

 7     9     6
 8     7     9
 7     6     7

На основе частоты их появления в матрице (Примечание. Эти значения даны для пояснения. Я заранее не рассчитал их заранее. Вот почему язадайте этот вопрос)

 number frequency
 6      2
 7      4
 8      1
 9      2

и ожидаемый результат будет

 4     2     2
 1     4     2
 4     2     4

Есть ли простой способ сделать это?

Ответы [ 3 ]

5 голосов
/ 23 марта 2012

Вот решение с тремя строками.Сначала подготовьте ввод:

X = [7 9 6;8 7 9;7 6 7];

Теперь выполните:

[a m n] = unique(X);

b = hist(X(:),a);

c = reshape(b(n),size(X));

Что дает это значение для c:

4     2     2
1     4     2
4     2     4

Если вы также хотели получить частотуматрица, вы можете получить его с помощью этого кода:

[a b']
3 голосов
/ 23 марта 2012

Вот код с циклом for (a - входная матрица, freq - частотная матрица с 2 столбцами):

weight = zeros(size(a));
for k = 1:size(freq,1)
    weight(a==freq(k,1)) = freq(k,2);
end
2 голосов
/ 23 марта 2012

Возможно, это можно решить без циклов, но мой код выглядит так:

M = [7     9     6  ;
     8     7     9  ;
     7     6     7  ;];

number = unique(M(:));
frequency = hist(M(:), number)';
map = containers.Map(number, frequency);

[height width] = size(M);
result = zeros(height, width); %allocate place

for i=1:height
  for j=1:width
    result(i,j) = map(M(i,j));
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...