首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >判断矩阵是否稀疏?

判断矩阵是否稀疏?
EN

Stack Overflow用户
提问于 2015-04-16 02:22:23
回答 1查看 3.2K关注 0票数 2

我有矩阵。我想知道它是否稀疏。在matlab中有任何函数来评估这个属性吗?我尝试使用issparse函数,但它总是返回0(而不是稀疏的)。例如,我的矩阵(27 by 27)

代码语言:javascript
复制
A=
  [ 1   0   0   0   0   1   1   1   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0
    1   1   0   0   0   0   1   0   1   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0
    1   1   1   0   0   0   0   1   0   1   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0   0   0
    0   1   1   1   0   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0   0
    0   0   1   1   1   0   0   1   0   1   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0
    0   0   0   1   1   1   0   0   1   0   0   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0   0
    0   0   0   0   1   1   1   0   0   1   0   0   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0
    250 243 247 245 244 244 244 122 61  144 72  36  18  9   4   2   1   1   0   0   0   0   0   0   0   0   0
    151 197 236 118 181 212 106 53  26  13  136 68  34  17  8   4   2   0   1   0   0   0   0   0   0   0   0
    24  12  6   3   143 201 234 117 180 90  45  152 76  38  19  9   4   0   0   1   0   0   0   0   0   0   0
    18  9   138 69  172 86  165 220 224 112 56  28  128 64  32  16  8   0   0   0   1   0   0   0   0   0   0
    27  131 207 103 189 94  47  153 194 239 119 59  29  128 64  32  16  0   0   0   0   1   0   0   0   0   0
    44  22  133 204 232 116 58  147 199 237 248 124 62  31  129 64  32  0   0   0   0   0   1   0   0   0   0
    238 119 181 90  45  152 76  38  19  135 205 232 116 58  29  128 64  0   0   0   0   0   0   1   0   0   0
    48  24  12  6   3   143 201 100 50  25  130 207 233 116 58  29  128 0   0   0   0   0   0   0   1   0   0
    168 84  42  21  132 66  33  158 79  39  19  135 205 232 116 58  29  0   0   0   0   0   0   0   0   1   0
    235 117 58  29  128 64  32  16  8   4   2   1   142 201 234 117 58  0   0   0   0   0   0   0   0   0   1
    0   0   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0   0   1   0   0   0   0   1   0   0   0
    0   1   1   0   0   0   0   1   1   0   0   0   1   1   1   0   0   0   0   0   1   1   0   0   0   0   0
    1   1   1   1   1   1   1   1   0   1   1   1   1   1   0   1   1   1   1   0   0   0   0   0   0   0   0
    0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   1   0   0   0   0   1   0
    0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   1   1
    0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   1   0   0   0   0   0   1   0   0   1   0   0
    0   0   0   0   0   1   0   0   0   1   0   0   0   1   0   0   0   0   0   1   0   0   1   0   0   0   1
    0   0   0   0   0   0   1   0   0   0   0   0   1   0   0   0   0   0   0   1   0   0   1   0   0   0   0
    0   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0   1   0   0   0   0   1   0
    0   0   1   0   0   1   0   0   1   0   0   1   0   0   1   0   1   0   0   0   0   1   1   0   0   0   0]

这是上面矩阵的数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 02:45:30

这个看似简单的问题很难回答。实际上,没有已知的标准来确定矩阵是稀疏的还是完全的。

然而,我所知道的最常见的度量方法是度量矩阵的稀疏性。这仅仅是零位总数与元素总数之比的分数。如果这超过了一些合理的阈值,那么你可以说矩阵是稀疏的。

如果给出矩阵A,可能是这样的:

代码语言:javascript
复制
sparsity = (numel(A) - nnz(A)) / numel(A);

numel确定矩阵A中元素的总数,nnz确定非零元素的总数。因此,numel(A) - nnz(A)应该给出零个元素的总数。

所以,按照阈值的想法,这就是我所说的:

代码语言:javascript
复制
is_sparse = sparsity > tol;

tol将是[0,1]的一部分,所以像0.75这样的东西可以工作。这意味着,如果75%的矩阵由零组成,这可能是一个稀疏矩阵。不过,这都是启发式的。选择一个你认为最有意义的门槛。

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

https://stackoverflow.com/questions/29664291

复制
相关文章

相似问题

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