我对Matlab很陌生,我有一个基本的问题。
我有一个数据集:
1 2 3
4 5 7
5 2 7
1 2 3
6 5 3我试图从上面的数据集中计算相对频率,特别是计算x=1、y=2和z=3的相对频率。
我的代码是:
data = load('datasetReduced.txt')
X = data(:, 1)
Y = data(:, 2)
Z = data(:, 3)
f = 0;
for i=1:5
if X == 1 & Y == 2 & Z == 3
s = 1;
else
s = 0;
end
f = f + s;
end
f
r = f/5它给了我一个0的结果。如何纠正代码??
谢谢,
肖绍
发布于 2016-12-14 01:59:32
您的问题很可能是 operator which is likely to fail due to floating point errors。
一种更快的方法是将ismember与'rows'选项结合使用,这将导致一个logical数组,然后您可以sum获取匹配的行总数,并将其除以行总数。
tf = ismember(data, [1 2 3], 'rows');
relFreq = sum(tf) / numel(tf);发布于 2016-12-14 09:00:25
我想您想要计算每个实例的频率,所以试试下面这个
data = [1 2 3
4 5 7
5 2 7
1 2 3
6 5 3];
[counts,centers] = hist(data , unique(data))中心是您唯一的实例,计数是每个实例的计数。结果如下:
counts =
2 0 0
0 3 0
0 0 3
1 0 0
1 2 0
1 0 0
0 0 2
centers =
1 2 3 4 5 6 7这意味着您有7个独特的实例,从1到7,第一列中有两个1s,第二和第三列中没有任何1s等等。
https://stackoverflow.com/questions/41133527
复制相似问题