2012-03-23 40 views

回答

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

比这个更直接?!? :) – 2012-03-23 14:21:04

3

这里是一个代码回路(a是输入矩阵,freq - 频率2列的矩阵):

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

它给了我这个错误'?未定义的函数或变量'freq'。' – 2012-03-23 13:47:15

+0

'a'和'freq'是输入矩阵。更新了答案。 – yuk 2012-03-23 13:51:38

+0

不好意思,我的问题之前没有解决。我没有预先计算的频率。我有什么只是输入矩阵,我更新了我的问题关于这个 – 2012-03-23 13:53:32

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 
相关问题