计算矩阵中特定值的个数

3,257 (30)
科里布拉德
科里布拉德 2012 年 5 月 2 日
我有一个大矩阵,m,我试图计算一个特定值的数量(即有多少个索引值为4?)
我试着用
Val = sum(m == 4);
但我最终得到val是一个数字的矩阵/向量。我假设这些数字来自每一列,应该加在一起得到总数,所以我试了另一个
Num = sum(val == 4);
但最后得到的是另一个向量/矩阵。
我该怎么做呢?

★★★★★

沃尔特·罗伯森
沃尔特·罗伯森 2012 年 5 月 2 日
Sum (m(:) == 4)
2 .
MathWorks支金宝app持团队
MathWorks支金宝app持团队 2020 年 9 月 2 日
R2018b或更高版本中可用的另一种语法是 总和(m = = 4,“所有” 但是对于这个简单的问题,用 米( :)可能会更快。

(6个)

Kye泰勒
Kye泰勒 2012 年 5 月 2 日
试试这个:
numberOfNonZeros = nnz(m==4);
使用nnz比将逻辑转换为数字更有效,这需要应用sum()
1 .
沃尔特·罗伯森
沃尔特·罗伯森 2019 年 8 月 22 日
【翻译】沃尔特·罗伯森 2019 年 8 月 22 日
在我刚刚做的测试中,sum()和nnz()的计时不能一致地区分这两种情况。Nnz()可能会稍微快一点,但时间范围显示出太多的重叠,因此无法得出真正的结论。nnz()可以更快,这是有道理的,但我目前无法证明它。毕竟,一个足够大的数组上的sum()可以分派给LAPACK。


肖恩·德·沃尔斯基
肖恩·德·沃尔斯基 2012 年 5 月 2 日
这很容易做到 histc () 独特的() 要获取每个值的个数:
Uv = unique(x);
N = histc(x,uv);
或与 独特的() accumarray ()
[uv,~,idx] = unique(x);
N = accumarray(idx(:),1)
2 .
沃尔特·罗伯森
沃尔特·罗伯森 2022 年 10 月 11 日
罗伊是对的。
在提出这个问题的时候,历史计数还不存在。
建议使用更新的histcounts而不是histc()
在传入bin边缘的地方,histc()分别计算与上限完全匹配的值,但是histcounts将它们与前一个bin一起计算。


ntsh基米-雷克南
ntsh基米-雷克南 2017 年 10 月 12 日
【翻译】ntsh基米-雷克南 2017 年 10 月 12 日
> >一个
一个=
5 5 5 5 5 5 6 9 96
5 3 9 5 2 7 5 6 2 1
8 3 6 9 8 7 5 1 6 9
> > ans1 =总和(= = 5)
ans1 =
2 1 1 2 1 1 3 0 0 0 0
> > b =总和(ans1)
b =
11
1 .
Manoj Payani
Manoj Payani 2018 年 5 月 16 日
非常感谢-它工作完美。


Dipanka tanu sarmah
Dipanka tanu sarmah 2017 年 11 月 11 日
如果你想计算NaN的个数,(如果有的话)使用nnz(isnan(m))

Vimal kumar chawda
Vimal kumar chawda 2020 年 5 月 18 日
但是如果我们想对NaN和大矩阵中的任何数值做这个呢?
ans1=sum(a==5)所以在这里,我的值是数值(这并不总是相同的),其他是NaN,这是常见的。但是我只需要计算特定值的数值x x2 x3...............X7000在y轴上。
y在x的特定值上出现多少次?
1 .
沃尔特·罗伯森
沃尔特·罗伯森 2020 年 5 月 18 日


帕特里克·奔驰
帕特里克·奔驰 2021 年 4 月 2 日
如何根据列中的值计算数组第二列中的值?
我得到了一个这样的数组:
400年0
396年0
392年1
400年0
396年1
400年1
我想知道在“400”或其他值旁边出现“1”或“0”的频率。
但这只给出了“1”和“0”的总数,以及在第一列中出现392的频率。
4 .

カテゴリ

了解更多有关矩阵和数组帮助中心文件交换

社区寻宝

在MATLAB Central中寻找宝藏,并了解社区如何帮助您!

开始狩猎!

翻译的