【问题标题】:Matlab function NNZ, numerical zeroMatlab 函数 NNZ,数值为零
【发布时间】:2019-05-21 15:05:41
【问题描述】:

我正在研究 Matlab 上最小二乘非负解恢复上下文中的代码,我需要(没有更多细节,因为它对这个问题并不重要)知道我的矩阵和数组中非零元素的数量.

matlab 上的函数 NNZ 正是我想要的,但碰巧我需要更多关于 Matlab 认为“零元素”的信息,它本身可能是 0,或者像 1e-16 或更小的数字零。

有人知道关于 NNZ 函数的信息吗,因为我无法获得原始脚本

谢谢。

PS : 我不是 Matlab 专家,所以如果这是一个非常简单的任务,请接受我的歉意。

我在 Matlab 上尝试了“open nnz”,但我只得到一个带有注释代码行的小脚本...

【问题讨论】:

  • 它只告诉你完美的零。你可以很容易地测试这个nnz(eps())
  • 感谢您提供此信息!

标签: matlab


【解决方案1】:

由于nnz 将所有非精确 零(即1e-100 非零)计算在内,您只需首先将relational operator 应用于您的数据以了解如何许多值超过了零附近的一些容差。对于矩阵A

n = nnz(abs(A) > 1e-16);

另外,this discussion of floating-point comparison 您可能会感兴趣。

【讨论】:

  • 谢谢,通过这种方式我可以修复我想要的任何阈值。
【解决方案2】:

您可以通过以下方式添加容差:

nnz(abs(myarray)>tol);

这将创建一个二进制数组,当 abs(myarray)>tol 时为 1,否则为 0,然后计算非零条目的数量。

【讨论】:

  • 我认为你的答案非常接近下一个答案,我想这就是我想要的谢谢!
  • 看起来我们几乎同时回答了这个问题。当心。看起来他的不平等倒退了。否则它们看起来是相同的。
  • @John:谢谢,小错字,刚刚改正。
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多