首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab中按列计算模式?

如何在Matlab中按列计算模式?
EN

Stack Overflow用户
提问于 2015-02-10 03:16:44
回答 5查看 405关注 0票数 0

我在Matlab中有一个矩阵S,如下所示:

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

我想按列计算价值观的模式。我感兴趣的是,在任何一列中,紧跟在数字3后面的数字的频率。例如,数字3在第一列中发生了三次。当我们第一次观察到它时,第二次是第三次,第二次是第三次,第三次是第四次。因此,在第一列中观察到的模式的频率如下:

代码语言:javascript
复制
3-3: 66.66%
3-4: 33.33% 
3-1: 0%
3-2: 0%
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-10 12:40:11

要生成输出,可以使用方便的表形

代码语言:javascript
复制
S = [
    2   2   1   2
    2   3   1   1
    3   3   1   1
    3   4   1   1
    3   1   2   1
    4   1   3   1
    1   1   3   1];

idx = find(S(1:end-1,:)==3);
S2 = S(2:end,:);

tabulate(S2(idx))
  Value    Count   Percent
      1        0      0.00%
      2        0      0.00%
      3        4     66.67%
      4        2     33.33%
票数 2
EN

Stack Overflow用户

发布于 2015-02-10 03:50:57

这里有一个方法,找到3,然后看下面的数字

代码语言:javascript
复制
[i,j]=find(S==3);
k=i+1<=size(S,1);
T=S(sub2ind(size(S),i(k)+1,j(k))) %// the elements of S that are just below a 3
R=arrayfun(@(x) sum(T==x)./sum(k),1:max(S(:))).' %// get the number of probability of each digit
票数 2
EN

Stack Overflow用户

发布于 2015-02-10 03:54:27

我将以我能理解的方式重新陈述你的问题陈述,我的解决方案将反映这个新的问题陈述。

  1. 对于特定的列,定位包含数字3的位置。
  2. 查看这些位置下面的行,并查看这些位置的值。
  3. 取这些值,并汇总所发现的总次数。
  4. 对所有列重复这些内容并更新计数,然后确定值出现的百分比。

我们可以通过以下方式做到这一点:

代码语言:javascript
复制
A = [2   2   1   2
2   3   1   1
3   3   1   1
3   4   1   1
3   1   2   1
4   1   3   1
1   1   3   1]; %// Define your matrix
[row,col] = find(A(1:end-1,:) == 3);
vals = A(sub2ind(size(A), row+1, col));
h = 100*accumarray(vals, 1) / numel(vals)

h =

          0
          0
    66.6667
    33.3333

让我们慢慢地看一下上面的代码。前几行定义示例矩阵A。接下来,我们将查看除矩阵的最后一行之外的所有行,并查看数字3在find中的位置。我们跳过最后一行,因为我们希望确保我们在矩阵的范围内。如果在最后一行有一个数字3,如果我们试图检查最后一行下面的值,就会有未定义的行为,因为那里什么都没有!

一旦我们这样做了,我们就会看到矩阵中那些在数字3下面的1行的值,我们使用sub2ind来帮助我们实现这一点。接下来,我们使用这些值并使用accumarray对它们进行汇总,然后用计算成百分比的总和对它们进行规范化。

结果将是一个4元素数组,该数组显示每个数字遇到的百分比。

为了进行二次检查,如果我们查看矩阵,我们可以看到3的值与其他3的值相同,共4次--第一列、第3行、第4行、第二列、第2行和第3列第6行。4的值跟随3次的值2次:第一列、第6行、第二列、第3行。

总之,我们有6个数字,所以除以6,我们得到4/6或66.67%的数字3和2/6或33.33%的数字4。

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

https://stackoverflow.com/questions/28423484

复制
相关文章

相似问题

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