根据每个元素在矩阵中出现的频率,创建权重矩阵的最简单方法是什么?

时间:2012-03-23 12:56:58

标签: matlab matrix

这是输入矩阵

 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 个答案:

答案 0 :(得分:5)

这是一个三线解决方案。首先准备输入:

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']

答案 1 :(得分:3)

以下是for循环的代码(a是输入矩阵,freq - 频率矩阵有2列):

weight = zeros(size(a));
for k = 1:size(freq,1)
    weight(a==freq(k,1)) = freq(k,2);
end

答案 2 :(得分:2)

也许它可以在没有循环的情况下解决,但我的代码看起来像:

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