首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中求矩阵中零元素的个数

在MATLAB中求矩阵中零元素的个数
EN

Stack Overflow用户
提问于 2014-08-15 12:39:01
回答 4查看 6.5K关注 0票数 1

例如,我有一个名为ANxM矩阵。经过一些处理后,我想要计算零个元素。我如何在一行代码中做到这一点?我尝试了A==0,它返回一个2D矩阵。

EN

回答 4

Stack Overflow用户

发布于 2014-08-15 15:40:08

有一个函数可以找到非零矩阵元素的个数nnz。您可以在逻辑矩阵上使用此函数,它将返回true的数量。

在本例中,我们对矩阵A==0应用nnz,因此逻辑矩阵的元素为true,如果原始元素为0,则为false

代码语言:javascript
复制
A = [1, 3, 1;
     0, 0, 2;
     0, 2, 1];
nnz(A==0)  %// returns 3, i.e. the number of zeros of A (the amount of true in A==0)

基准测试的学分属于Divarkar。

基准测试

使用以下参数和输入,可以对timeit提供的解决方案进行基准测试。

输入大小

1:10:100

  • Medium大小的数据大小- 50:50:1000

  • Large大小的数据大小- 500:500:4000

-

  • 小型数据大小

零值的变化百分比

零值约为10%的大小写- A = round(rand(N)*5);

  • ~50% of零大小写- A = rand(N);A(A<=0.5)=0;

  • ~90% of

  • 大小写- A = rand(N);A(A<=0.9)=0;

结果如下所示-

1)小型数据化

2. Medium数据化

3.对进行大数据化

Observations

  1. 如果您仔细查看中型和大型数据存储的NNZSUM性能图,您会注意到,在10%90%为零的情况下,它们的性能越来越接近。对于50%为零的情况,SUMNNZ方法之间的性能差距相对较大。

  1. 作为对所有数据和所有三种零小数情况的一般观察,SUM方法似乎是无可争议的赢家。这里还观察到一件有趣的事情,一般情况下的解决方案sum(A(:)==0)似乎比sum(~A(:)).

的性能更好

票数 26
EN

Stack Overflow用户

发布于 2014-08-15 12:41:08

一些基本的matlab知识:(:)运算符将任何矩阵展平为列向量,~是将零转换为一,非零值转换为零的NOT运算符,然后我们只需使用sum:

代码语言:javascript
复制
sum(~A(:))

在效率很重要的情况下,这也应该比length(find...方案快大约10倍。

编辑:在NaN值的情况下,您可以求助于解决方案:

代码语言:javascript
复制
sum(A(:)==0)
票数 15
EN

Stack Overflow用户

发布于 2014-08-15 13:56:48

我也会在这个组合中添加一些东西。您可以使用histc并计算整个矩阵的直方图。将第二个参数指定为应收集数字的存储箱。如果我们只想计算0的个数,我们可以简单地指定0作为第二个参数。但是,如果您在histc中指定一个矩阵,它将沿着列进行操作,但我们希望对整个矩阵进行操作。因此,只需将矩阵转换为列向量A(:)并使用histc即可。换句话说,这样做:

代码语言:javascript
复制
histc(A(:), 0)

这应该等同于计算整个矩阵A中的零的数量。

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

https://stackoverflow.com/questions/25321341

复制
相关文章

相似问题

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