Matlab 如何使用issparse函数?

Matlab 如何使用issparse函数?,matlab,matrix,sparse-matrix,Matlab,Matrix,Sparse Matrix,稀疏矩阵是大多数元素为零的矩阵。相反,如果大多数元素都是非零的,则认为矩阵是稠密的。 当零值元素数除以元素总数大于0.5时,矩阵A将稀疏 我正在使用内置函数issparse检查矩阵的稀疏性,但该函数始终给出0 如何修复此代码 A = [0 0 0; 0 1 0; 1 0 0]; % Matrix-A S = issparse(A); % Checking Matrix-A is sparse if S == 1 disp('Matrix-A is Sparse Matrix\n') e

稀疏矩阵是大多数元素为零的矩阵。相反,如果大多数元素都是非零的,则认为矩阵是稠密的。 当零值元素数除以元素总数大于0.5时,矩阵
A
将稀疏

我正在使用内置函数
issparse
检查矩阵的稀疏性,但该函数始终给出
0

如何修复此代码

A = [0 0 0; 0 1 0; 1 0 0]; % Matrix-A
S = issparse(A); % Checking Matrix-A is sparse  
if S == 1
   disp('Matrix-A is Sparse Matrix\n')
else
   disp('Matrix-A is Dense Matrix\n')
end
输出为:

矩阵A是稠密矩阵


为什么?

根据(重点矿山)的文件:

TF=issparse(S)
如果
S
存储类是
稀疏的,则返回逻辑1(
true
),否则返回逻辑0(
false

数学中称为稀疏矩阵的东西在MATLAB中不一定是稀疏矩阵。在MATLAB中,即使是全零矩阵也可以是稠密矩阵,全非零矩阵也可以是稀疏矩阵。然而,在MATLAB中使用稀疏矩阵的目的是通过只存储非零元素及其索引来减少所需的内存量。阅读文档()以了解有关创建稀疏矩阵的更多信息

示例:

  • 以下
    A
    矩阵是稀疏的:

     A = sparse([1 1 1; 1 1 1; 1 1 1]);
    
    >> issparse(A)    
    ans =    
      logical    
       1
    
  • 以下
    B
    矩阵密集:

    B = [0 0 0; 0 0 0; 0 0 0];
    
    >> issparse(B)    
    ans =    
      logical    
       0 
    
所以,你的工作空间是一个密集的矩阵。通过显式计算分数,即

if nnz(A)/numel(A) <= 0.5
   disp('Matrix-A is Sparse Matrix\n');
else
   disp('Matrix-A is Dense Matrix\n');

如果nnz(A)/numel(A)哪一个更高效、更快2 for循环或通过nnz函数,我不理解您在上述评论中的要求。您能重新表述一下吗?我们可以编写一个嵌套for循环来测试输入矩阵a是否是稀疏矩阵。或者通过使用nnz/numel函数,使用上述代码中的内置函数。我的问题是哪种代码更快?从这个结果可以得出什么结论?嵌套的
for
循环对于这个任务来说是一个过度的杀伤力,nnz/numel函数更有可能更好更快。如果使用嵌套的
for
循环来实现它,则很可能是自实现的nnz/numel函数。除非您对其进行mex,否则我相信嵌套的
for
循环与nnz/numel函数相比将保持较慢的速度感谢您的支持,但在对循环及以上代码进行测试后,我的结果经过的时间为0.020615秒。-for循环经过的时间为0.033064秒。按nnz函数采样数组A=0(10001000);如果数组为1(10001000),则另一个结果经过的时间为0.039131秒。对于循环,已用时间为0.008463秒。由nnz提供