这是输入矩阵
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
有一种简单的方法吗?
答案 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