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

SPR*_*pal 4 matlab

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

小智 5

直接的答案是:

M(M == 0) = realmin;
Run Code Online (Sandbox Code Playgroud)

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

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

M = max(M,realmin);
Run Code Online (Sandbox Code Playgroud)

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

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

log10(realmin)
ans =
 -307.6527
Run Code Online (Sandbox Code Playgroud)

将其与eps进行比较.

log10(eps)
ans =
  -15.6536
Run Code Online (Sandbox Code Playgroud)