首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Matlab计算数据集中一行的相对频率?

如何使用Matlab计算数据集中一行的相对频率?
EN

Stack Overflow用户
提问于 2016-12-14 01:49:24
回答 2查看 375关注 0票数 2

我对Matlab很陌生,我有一个基本的问题。

我有一个数据集:

代码语言:javascript
复制
1 2 3 
4 5 7
5 2 7
1 2 3
6 5 3

我试图从上面的数据集中计算相对频率,特别是计算x=1、y=2和z=3的相对频率。

我的代码是:

代码语言:javascript
复制
    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的结果。如何纠正代码??

谢谢,

肖绍

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-14 01:59:32

您的问题很可能是 operator which is likely to fail due to floating point errors

一种更快的方法是将ismember'rows'选项结合使用,这将导致一个logical数组,然后您可以sum获取匹配的行总数,并将其除以行总数。

代码语言:javascript
复制
tf = ismember(data, [1 2 3], 'rows');
relFreq = sum(tf) / numel(tf);
票数 1
EN

Stack Overflow用户

发布于 2016-12-14 09:00:25

我想您想要计算每个实例的频率,所以试试下面这个

代码语言:javascript
复制
data = [1 2 3 
4 5 7
5 2 7
1 2 3
6 5 3];


[counts,centers] = hist(data , unique(data))

中心是您唯一的实例,计数是每个实例的计数。结果如下:

代码语言:javascript
复制
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等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41133527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档