4

我有一个矩阵,其中一些元素变为零。在后续操作(记录日志等)中,这对我来说是一个问题。有没有办法用我选择的输入快速替换矩阵中的零元素。快速 - 意思是,没有循环。

4

3 回答 3

5

直接的答案是:

M(M == 0) = realmin;

这完全符合您的要求,用一个小数字替换零。看到这以向量化的方式隐式搜索零。不需要循环。(这是一种 MATLAB 方式,避免了那些显式且缓慢的循环。)

或者,您可以使用 max,因为负数从来都不是问题。所以

M = max(M,realmin);

也将工作。同样,这是一个矢量化解决方案。如果没有仔细测试,我不能肯定哪个更快,但肯定可以接受。

请注意,我在这里使用了 realmin 而不是 eps,因为它在双精度数字中尽可能小。但是使用对您有意义的任何小数字。

log10(realmin)
ans =
 -307.6527

将其与 eps 进行比较。

log10(eps)
ans =
  -15.6536
于 2013-06-05T18:16:17.633 回答
4

当然 - 其中 A 是你的矩阵,

A(A==0) = my_small_number;
于 2013-06-05T18:07:37.600 回答
3

假设你的矩阵被称为A

A(A==0) = eps;
于 2013-06-05T18:07:50.183 回答