这是输入矩阵根据每个元素在矩阵中出现的频率来创建权重矩阵的最简单方法是什么?
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
有没有一种简单的方法来做到这一点?
这是输入矩阵根据每个元素在矩阵中出现的频率来创建权重矩阵的最简单方法是什么?
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
有没有一种简单的方法来做到这一点?
这是一个三线解决方案。首先准备输入:
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']
这里是一个代码回路(a
是输入矩阵,freq
- 频率2列的矩阵):
weight = zeros(size(a));
for k = 1:size(freq,1)
weight(a==freq(k,1)) = freq(k,2);
end
它给了我这个错误'?未定义的函数或变量'freq'。' – 2012-03-23 13:47:15
'a'和'freq'是输入矩阵。更新了答案。 – yuk 2012-03-23 13:51:38
不好意思,我的问题之前没有解决。我没有预先计算的频率。我有什么只是输入矩阵,我更新了我的问题关于这个 – 2012-03-23 13:53:32
或许可以没有循环解决,但我的代码如下所示:
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
比这个更直接?!? :) – 2012-03-23 14:21:04