Nra*_*ras 25
有一个函数可以找到非零矩阵元素的数量nnz.您可以在逻辑矩阵上使用此函数,该矩阵将返回数字true.
在这种情况下,我们应用于nnz矩阵A==0,因此true如果原始元素为0,则逻辑矩阵的元素false对于除0之外的任何其他元素.
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:10050:50:1000500:500:4000改变零的百分比
A = round(rand(N)*5);A = rand(N);A(A<=0.5)=0;A = rand(N);A(A<=0.9)=0;结果显示如下 -
1)小数据



2. Medium Datasizes



3.大型数据



意见
如果你仔细观察到NNZ,并SUM于大中型datasizes性能曲线,你会发现自己的表现更接近对方10%和90%零病例.对于50%零情况,方法SUM与NNZ方法之间的性能差距相对较大.
作为对所有数据和所有三个零分数的一般观察,
 SUM方法似乎是无可争议的赢家.同样,在这里观察到一个有趣的事情,一般案例解决方案sum(A(:)==0)似乎在性能上比sum(~A(:)).
bla*_*bla 15
一些基本的matlab要知道:(:)运算符会将任何矩阵展平为列向量,~NOT运算符将零翻转为1而非零值为零,然后我们只使用sum:
sum(~A(:))
如果效率很重要,这也应该比方案快10倍左右length(find....
编辑:在NaN值的情况下,您可以求助于解决方案:
sum(A(:)==0)
| 归档时间: | 
 | 
| 查看次数: | 6099 次 | 
| 最近记录: |