MATLAB - 用小数字替换矩阵中的零

时间:2013-06-05 18:05:30

标签: matlab

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

3 个答案:

答案 0 :(得分:5)

直接答案是:

M(M == 0) = realmin;

这正是你要求的,用一个小数字替换零。看到这是以向量化方式隐式搜索零。不需要循环。 (这是一种MATLAB方式,避免那些显式和慢速循环。)

或者,您可以使用max,因为负数永远不会成为问题。所以

M = max(M,realmin);

也会奏效。同样,这是一个矢量化解决方案。如果没有经过仔细的测试,哪一个更快,我不肯定,但要么肯定是可以接受的。

请注意,我在这里使用的是realmin而不是eps,因为它实际上可以使用双精度数字。但是使用任何对你有用的小数字。

log10(realmin)
ans =
 -307.6527

将其与eps进行比较。

log10(eps)
ans =
  -15.6536

答案 1 :(得分:4)

当然 - A是你的矩阵,

A(A==0) = my_small_number;

答案 2 :(得分:3)

假设您的矩阵被称为A

A(A==0) = eps;